![](/img/trans.png)
[英]MySQL select all distinct values from column a for each distinct column b, where count distinct a >1
[英]MySQL - Display null column from child table if all values are not distinct
我有以下表格,例如:
發票
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
嘗試類似的東西:
select i.id, i.name, t.user_id
from invoices i left join
(
select invoice_ID, User_ID
from transactions
group by invoice_ID
having count(invoice_ID)=1
) t on i.id=t.invoice_id
您可以列出具有多個用戶標識的所有事務,如下所示:
select invoices.id, invoices.name, null
from invoices
left join transactions on invoices.id = transactions.invoice_id having count(distinct transactions.user_id) > 1
另外,我認為這種CASE
可能適合您的需求:
select invoices.id, invoices.name,
case when count(distinct transactions.user_id) > 1 then null else transactions.user_id end
from invoices
left join transactions on invoices.id = transactions.invoice_id
group by invoices.id
雖然,我不確定這在語法上是否正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.