我一直在寻找并且无法找到我想要做的事情的答案。 我不知道是否可以通过以下方式创建查询。
$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找到某个结果,其中某些内容=某些内容并且特定表中没有行?
答案 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种类型的连接
INNER JOIN
(加入) - 在两个表中匹配ID LEFT JOIN
- 在表A中匹配id,在表B中可以为null RIGHT JOIN
- 匹配表B中的id,可以为null表A OUTER JOIN
- 两个表中都可以为空建议您阅读以下文章 http://www.sitepoint.com/understanding-sql-joins-mysql-database/
因此,对于您的问题我猜,您应该使用RIGHT JOIN survey_audit
代替LEFT JOIN survey_audit