【问题标题】:Single SQL statement based on the existence of foreign keys基于外键存在的单条SQL语句
【发布时间】:2021-06-20 13:37:33
【问题描述】:

我在一个数据库中有两个表

表 1

T1ID T1Value
1 T1V1
2 T1V2
3 T1V3
4 T1V4

表 2

T2ID T1FK T2Value
1 2 T2V1
2 3 T2V2

请注意,Table2 有一个外键,它引用 Table1 中的 T1ID。另请注意,并非 Table1 中的所有条目在 Table2 中都有对应的条目。

现在,我想使用 SINGLE SQL 语句来执行以下两个操作

  1. 如果Table2中有与Table1相关的对应条目,则运行以下语句

    SELECT t1.*, t2.T2Value FROM Table1 AS t1 INNER JOIN Table2 AS t2 ON t1.T1ID = t2.T1FK WHERE t1.T1ID = 2

  2. 如果 Table2 中没有与 Table1 相关的任何对应条目,则运行以下语句(注意返回 NULL 而不是 t2.T2Value

    SELECT t1.*, NULL FROM Table1 AS t1 WHERE t1.T1ID = 4

(请注意,t1.T1ID 是程序提供的,所以这个值会改变。我只是向你展示我需要的东西)

如何将以上两个语句合并为一个语句?

谢谢。

【问题讨论】:

  • 如果 Table2 中没有与 Table1 相关的任何对应条目,您的意思是 t1.T1ID = 2 还是 Table2 中没有引用任何 T1ID 的 T1FK 行?
  • @forpas 既然你提到了,我也想知道。
  • @forpas - 我的意思是 Table2 中没有 T1FK 引用任何 T1ID 的行

标签: mysql sql select mariadb


【解决方案1】:

一个简单的LEFT JOIN 会做你想做的事。例如:

select t1.*, t2.t2value
from table1 t1
left join table2 t2 on t1.t1id = t2.t1fk
where t1.t1id = <parameter>

例如:

  • 如果参数为 2,则找到相关行,查询返回该行的值 (t2.t2value)。
  • 如果参数为 4,则找不到相关行,查询返回 NULL。

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 2023-01-12
    • 2017-07-27
    • 1970-01-01
    • 2021-12-05
    • 2019-12-14
    • 2015-11-21
    • 2020-12-27
    • 2013-02-11
    相关资源
    最近更新 更多