簡體   English   中英

MySQL-如果所有值都不同,則顯示子表中的空列

[英]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

SQL小提琴

您可以列出具有多個用戶標識的所有事務,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM