如何编辑我的查询以生成正确的IF / Join语句?

时间:2017-08-03 00:26:28

标签: php mysql sql

我的结构解释如下: 我有2个表,alerts_listid

我想要做的是查询将在两个表中查看,但有时信息将仅从一个表中收集,有时它将来自两个表。

我的查询查看alerts_conditions和/或alerts_list上是否找到了id

始终在alerts_list表格中找到id。 因此,如果在alerts_conditions上找到alerts_list,则表示它在id中也有一行。

但是,如前所述,有些情况alerts_list只会在id上找到。

目前,如果只在alerts_list上找到alerts_list,我会收到混合数据。 我的问题是

  1. 如何更改我的查询,以便当alerts_conditions上的ID 时,id的列将显示为空?
  2. 当在两个表中找到id以从两者获取数据时?
  3. 在这种情况下,数字50是SELECT * FROM alerts_conditions, alerts_list WHERE (alerts_conditions.alerts_conditions_alert = 50 OR alerts_list.alerts_id=50) AND alerts_conditions.company_id = 1 LIMIT 1

    company_id

    注意

    {{1}}与此问题无关,必须将其排除在任何条款之外。

2 个答案:

答案 0 :(得分:0)

SELECT al.*, ac.* 
FROM   alerts_list al
LEFT JOIN alerts_conditions ac ON (al.alerts_id=ac.alerts_conditions_alert)
WHERE  al.alerts_id=50
       AND (
         ac.alerts_conditions_alert is NULL 
         OR 
         ac.company_id = 1
       )
LIMIT  1 

如果alerts_conditions中没有其他信息,则其字段将等于NULL,否则将检查company_id是否匹配。

答案 1 :(得分:0)

写这个的正确方法是将条件放在alerts_conditions子句中的on

SELECT ac.*, al.*
FROM alerts_list al LEFT JOIN
     alerts_conditions ac
     ON ac.alerts_conditions_alert = al.alerts_id AND
        ac.company_id = 1 
WHERE al.alerts_id = 50
LIMIT 1 ;