MySQL:查询取决于字段值 - CASE可以帮助构建您的查询吗?

时间:2012-03-18 10:39:37

标签: mysql switch-statement case

为方便起见,有 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)......


编辑:谢谢你的回答,ypercube!对不起,我描述的结构并不完全正确。实际上,表格如下所示:

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) ...

再次感谢你,你们的帮助很大! :)

1 个答案:

答案 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)
相关问题