【问题标题】:mysql - displaying values from columnA by values in columnBmysql - 按列中的值显示列中的值
【发布时间】:2015-07-17 17:34:37
【问题描述】:

我正在尝试在 MySql 中创建一个查询,该查询连接两个表并显示两者的值。

表A:

id | value
----------
 1 |   123
 2 |   456
 3 |   789

表B:

id | key | value | type
-----------------------
 1 |   1 |    10 |  'A'
 2 |   1 |    11 |  'B'
 3 |   2 |    12 |  'A'
 4 |   2 |    13 |  'B'
 5 |   2 |    14 |  'C'
 6 |   3 |    15 |  'A'
 7 |   3 |    16 |  'B'

这些表在TableA.id = TableB.key 上连接。我想显示TableA.idTableB.value - 但是我只关心来自C 类型的TableB 中的值。如果没有“C”类型条目,那么我想显示null(不管它到底是什么,实际上可以是空的,或者只是一个说“空”的字符串)。对于上面的例子,我希望结果是:

ID | Value
----------
1  |  null
2  |    14
3  |  null

到目前为止,我还没有想出任何东西——我尝试过的所有东西要么没有获取任何数据,要么显示太多。我在概念上最接近的是:

select TA.id as 'ID', TB.value as 'Value'
from TableA TA
left join TableB TB on TA.id = TB.key
where TB.type = 'C';

但这只会导致:

ID | Value
----------
 2 |    14

并且会省略 ID 的 13。如有任何帮助,我们将不胜感激!

**注意:我意识到有更好的方法来组织这些表以使其变得容易。唉,我不控制数据库结构/模式。

【问题讨论】:

    标签: mysql left-join inner-join


    【解决方案1】:

    你快到了,在 JOIN 之后会发生 WHERE(大部分情况):

    SELECT TA.id AS 'ID', TB.value AS 'Value'
    FROM TableA AS TA
    LEFT JOIN TableB TB AS TA.id = TB.key AND TB.type = 'C'
    ;
    

    表结构对我来说没有什么特别糟糕的地方。

    【讨论】:

    • 正是我想要的——感谢闪电般的快速回复!
    • 我发的完全一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多