PHP MySQL查询WHERE等于AND行不存在

时间:2015-01-21 14:42:16

标签: php mysql

我一直在寻找并且无法找到我想要做的事情的答案。 我不知道是否可以通过以下方式创建查询。

$sql_call = "SELECT table.item,table.item,table.item FROM cust 
        LEFT JOIN contact ON cust.id = contact.client_id 
        LEFT JOIN survey_audit ON cust.id = survey_audit.cust_id 
        WHERE cust.clinic='$clinic_id' AND contact.participate='1' AND survey_audit.survey_id != '$post_survey_id'";

上面的查询并没有做我想做的事情,那就是:

从表中获取数据WHERE cust.clinic = something AND contact.participate = something(这是我不确定的部分)在Survey_audit表中,没有带有此id的行。

是否可以让sql找到某个结果,其中某些内容=某些内容并且特定表中没有行?

3 个答案:

答案 0 :(得分:1)

你有点走上正轨。您只需要查找survey_audit.survey_id为NULL的情况。

SELECT table.item,table.item,table.item
FROM cust 
LEFT JOIN contact
  ON cust.id = contact.client_id 
LEFT JOIN survey_audit
  ON cust.id = survey_audit.cust_id 
WHERE cust.clinic='$clinic_id'
AND contact.participate='1'
AND survey_audit.survey_id IS NULL

这是一个非常有用的资源,可帮助您确定如何形成更复杂的连接方案。您的案例是此页面上的第4个示例。

http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

答案 1 :(得分:0)

您可以使用子查询排除表的所有元素:

$sql_call = "SELECT table.item,table.item,table.item FROM cust 
        LEFT JOIN contact ON cust.id = contact.client_id 
        LEFT JOIN survey_audit ON cust.id = survey_audit.cust_id 
        WHERE cust.clinic='$clinic_id' AND contact.participate='1' AND survey_audit.survey_id NOT IN (SELECT survey_id FROM Survey_audit);

答案 2 :(得分:0)

是的,有可能,您应该阅读更多关于mysql中其他类型的连接有4种类型的连接

  1. INNER JOIN(加入) - 在两个表中匹配ID
  2. LEFT JOIN - 在表A中匹配id,在表B中可以为null
  3. RIGHT JOIN - 匹配表B中的id,可以为null表A
  4. OUTER JOIN - 两个表中都可以为空
  5. 建议您阅读以下文章 http://www.sitepoint.com/understanding-sql-joins-mysql-database/

    因此,对于您的问题我猜,您应该使用RIGHT JOIN survey_audit代替LEFT JOIN survey_audit