例如,我有以下表格:
发票
ID Name
1 A
2 B
3 C
4 D
5 E
交易
ID Invoice_ID User_ID
1 1 10
2 1 10
3 1 10
4 2 30
5 3 20
6 3 40
7 2 30
8 2 30
9 4 40
10 3 50
现在我想做一个选择,从相关交易中提取发票和 user_id,但当然,如果我这样做,我不会得到所有的 ID,因为它们可能是不同的,但只有一个专栏。我想要做的是,如果有不同的 User_id,我将在列中显示预定义的文本而不是实际结果。
select invoices.id, invoices.name, transactions.user_id(if there are distinct user_ids -> return null)
from invoices
left join transactions on invoices.id = transactions.invoice_id
然后就是这个结果
ID Name User_ID
1 A 10
2 B 30
3 C null
4 D 40
5 E null
这可能吗?
最佳答案
您可以执行以下操作:
select
invoices.id,
invoices.name,
IF (
(SELECT COUNT(DISTINCT user_id) FROM transactions WHERE transactions.invoice_id = invoices.id) = 1,
(SELECT MAX(user_id) FROM transactions WHERE transactions.invoice_id = invoices.id),
null
) AS user_id
from invoices
或者,您也可以使用 GROUP_CONCAT函数为每张发票输出以逗号分隔的用户列表。这不完全是你问的,但实际上它可能更有用:
select
invoices.id,
invoices.name,
GROUP_CONCAT(DISTINCT transactions.user_id SEPARATOR ',') AS user_ids
from invoices
left join transactions on invoices.id = transactions.invoice_id
group by invoices.id
关于MySQL - 如果所有值都不不同,则显示子表中的空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36723152/