sql - Saclar 子查询产生了多个元素
问题描述
我有桌子
客户1 +----+------+-------------+ | 身份证 | 姓名 | 参考ID | +----+------+-------------+ | 1 | 啊!| | 2 | bbb | 1 | | 3 | 抄送 | 2 | | 4 | dd | 2 | | 5 | eee | 4 | +----+------+-------------+
发票 +-----+--------------+---------+ | 身份证 | 帐单日期 | cust_id | +-----+--------------+---------+ | 101 | 01-02-2017 | 1 | | 102 | 01-03-2017 | 2 | | bbb | 01-04-2017 | 3 | +-----+--------------+---------+
我需要输出为
+-----+--------------+------------+---------------+ | 身份证 | 帐单日期 | 客户名 | 被提及的名称 | +-----+--------------+------------+---------------+ | 101 | 01-02-2017 | 啊!| | 102 | 01-03-2017 | bbb | 啊! | bbb | 01-04-2017 | 抄送 | bbb | +-----+--------------+------------+---------------+
Select c.id,
i.billing_date,
c.name,
(select
b.name as referred_name
from cust1 a left join cust1 b on a.referred_id=b.id)
from cust1 c, invoice i where c.id=i.cust_id
上面的查询抛出错误,因为标量子查询产生了多个元素。有人可以看看这个。
谢谢
解决方案
您的主要问题是您的子查询不相关。在您的主查询中,您处理表cust1
aliasedc
和invoice
aliased i
,但在您的子查询中,您没有引用c
或根本没有引用i
。
看来你想要:
select
c.id, i.billing_date, c.name,
(
select cr.name
from cust1 cr
where cr.id = c.referred_id
) as referred_name
from invoice i
join cust1 c on c.id = i.cust_id
order by c.id, i.billing_date;
您可以通过外连接实现相同的目的:
select c.id, i.billing_date, c.name, cr.name as referred_name
from invoice i
join cust1 c on c.id = i.cust_id
left join cust1 cr on cr.id = c.referred_id
order by c.id, i.billing_date;
这两个查询都是标准 SQL,并且非常基础。我假设它们也可以在您的环境中运行。
推荐阅读
- javascript - 根据选定的日期和周末在输入中显示文本/数字
- java - 扫描仪命中空行抛出 ArrayIndexOutOfBoundsException
- javascript - 当我点击 Instagram 的链接时,为什么我无法在应用内浏览器中禁用滚动?
- python - 如何在pygame中获得两个向量之间的角度?
- javascript - 使用 Vanilla JS 检测对 @page 的支持
- rust - TryFrom<&[u8]> 特征绑定在特征中
- html - 如何仅使用 html5 创建切换元素
- javascript - 没有从 intlTelInput 输入中获取国家/地区代码
- python - 如何计算python中特定id的日期之间的平均差距?
- node.js - 无法修改已提交的 WriteBatch