MySQL:如果列值为2那么X ELSE会做Y

时间:2015-07-27 12:21:25

标签: php mysql if-statement

我现在正在处理的数据库有些混乱。我有三个潜在的表,我想加入,但在某些情况下,它可能只有两个表。 我们称这些为table1,table2和table3。

table1有一个名为“type”的字段。如果table1.type是2,那么我只需要连接table3。 对于任何其他值,我想加入table2,然后加入table3。

如何在单个SQL查询中实现此目的,而不是:1)有一个查询来选择类型。 2)创建一个PHP foreach循环来检查当前迭代的类型,3)根据类型值执行一个新的查询。

修改 我会尝试更具体。

table1有一个名为“pid”的列,它引用了整个其他表,但这对于这个问题来说是多余的。我尝试用UNIONs和LEFT JOIN来解决这些问题,但无法实现我想要的目标。

我想从我的数据库中选择“pid”值为“100”的所有结果。这给了我四行作为回报,其中2行的类型值为“2”,其他行为“1”。

基本上我想要实现的是以下两个SQL语句:

(如果“type”为“2”)

SELECT *
FROM table1 t1
INNER JOIN table3 t3
ON t1.id = t3.t1_id
WHERE t1.pid = 100

(如果“type”不是“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'部分感到困惑。

1 个答案:

答案 0 :(得分:0)

使用 UNION ,例如

SELECT t1.*, t3.*
   FROM table1 t1
   INNER JOIN table3 t3  ON t1.id = t3.t1_id
   WHERE t1.pid = 100 and t1.type = 2
UNION
SELECT t1.*, t3.*
   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 and t1.type <> 2;

但最好明确指定要返回的列。