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

标签 mysql

例如,我有以下表格:

发票

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/

相关文章:

Mysql 内部连接两个表中的计数

mysql - 需要帮助从选择查询更新表

php - 如何使用 php/mysql 计算进入同一页面的不同链接上的点击次数

mysql - 将 MYSQL 转换为 MSSQL

mysql 查询两个表?

MySQL:检查条目是否在逗号分隔字段中具有值的最有效方法?

PHP 行执行(MySQL 命令)两次(或者在注释掉后根本不执行)

mysql - 具有多个基本情况的递归 SQL

php - 我怎样才能让这个查询运行得更快

mysql 加载数据 INFILE 更新