我现在正在处理的数据库有些混乱。我有三个潜在的表,我想加入,但在某些情况下,它可能只有两个表。 我们称这些为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'部分感到困惑。
答案 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;
但最好明确指定要返回的列。