【发布时间】:2015-07-27 12:21:25
【问题描述】:
我现在正在处理的数据库有些混乱。我有三个潜在的表,我想加入,但在某些情况下它可能只有两个表。 我们将它们称为 table1、table2 和 table3。
table1 有一个名为“type”的字段。如果table1.type 为2,那么我只需要加入table3。 对于我想加入 table2 和 table3 的任何其他值。
我怎样才能在一个 SQL 查询中实现这一点,而不是:1)用一个查询来选择类型。 2) 做一个 PHP foreach-loop 来检查当前迭代的类型和 3) 根据类型值执行一个新的查询。
编辑: 我会尽量具体一点。
table1 有一个名为“pid”的列,它引用了整个其他表,但这对于这个问题来说是多余的。我尝试使用 UNION 和 LEFT JOIN 来解决问题,但无法实现我想要的。
我想从我的数据库中选择“pid”值为“100”的所有结果。这给了我四行作为回报,其中 2 行的类型值为“2”,其他的为“1”。
所以基本上我想要实现的就是以下两条SQL语句合二为一:
(如果“类型”是“2”)
SELECT *
FROM table1 t1
INNER JOIN table3 t3
ON t1.id = t3.t1_id
WHERE t1.pid = 100
(如果“类型”不是“2”)
SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.t1_id
INNER JOIN table3 t3
ON t2.id = t3.t2_id
WHERE t1.pid = 100
我猜我可以使用 UNION 语句来做到这一点,但我对如何实现 WHERE t1.pid = '100' 部分感到困惑。
【问题讨论】:
-
如果您可以提供一个简单的示例数据库作为 SQL 供回答者使用,那将会很有帮助。
-
到目前为止,在 mysql 中,您无法像问题中提到的那样进行条件连接。
-
您可以使用两个 SQL 语句的 UNION
-
您可以使用这样的选择语句:stackoverflow.com/questions/9749986/…
-
检查调整后的答案
标签: php mysql if-statement