为方便起见,有 table1 (id,field1,other_table_id), table2 (id,field1)和 table3 (id ,field1)。我在table1上有一个SELECT,但是取决于field1的值是2还是3,它应该与表2或3一起JOIN(其他_table_id则是table2或table3的id)。
我可以使用CASE吗?如果没有,我怎么能做到最好?我可以在一个查询中完成吗?
非常感谢你!
PS:我认为这是一个类似的主题:MySQL query where JOIN depends on CASE但我不明白解决方案。另外,我不知道如何使用MySQL中的CASE(http://dev.mysql.com/doc/refman/5.0/en/case-statement.html)......
table1:id,assigned_to,assigned_id rooms_assigned:id,objects_id,room_type_id 对象:id,...
所以,我在PHP $ object_id中有对象id,那么如何在查询的WHERE中使用它呢?
根据你的回答,正确的查询会是这样吗?:
SELECT COALESCE (ra.objects_id, o.id) AS objects_id
FROM table1 as t
LEFT JOIN rooms_assigned AS ra
ON (ra.id,2)=(t.assigned_id,t.assigned_to)
LEFT JOIN objects AS o ON (o.id,3)=(t.assigned_id,t.assigned_to)
WHERE ?
编辑2:我想我已经解决了关于“我在哪里”的问题。我只是在查询语句中没有使用WHERE,而是将它添加到两个“ON”,如ON(ra.id,ra.object_id,2)=(t.assigned_id,“。$ object_id。”,t.assigned_to) ...
再次感谢你,你们的帮助很大! :)
答案 0 :(得分:1)
在LEFT
列表中使用两个COALESCE()
联接和SELECT
:
SELECT
COALESCE(t2.someColumn, t3.someColumn) AS someColumn
FROM
table1 AS t
LEFT JOIN
table2 AS t2
ON (t2.id, 2) = (t.other_table_id, t.field1)
LEFT JOIN
table3 AS t3
ON (t3.id, 3) = (t.other_table_id, t.field1)