我正在尝试编写一个语句,它将检查2个表并比较2并且仅显示不在table2上的用户。例如: table1 包含user1,user2,user3和user4 AND table2 有user1,user3和user4,然后它只会在列表中显示user2。
我能够写一些基本的东西,只显示member_id ='1',但我不知道如何使它按照我想要的方式工作。我希望你理解我的问题。我将包含处理此问题的简短代码...
$sql->db_Select(DB_TABLE_ROSTER_MEMBERS, "*", "member_id='1' AND
(member_status like 'Team Member%'
OR member_status like 'Squad Leader%'
OR member_status like 'Recruiter%'
OR member_status like 'New Recruit%'$customArgs)
ORDER BY member_application_date DESC");
此处的语法可以在此处找到 - http://wiki.e107.org/index.php?title=Db#db_Select.28.29 我猜我只需要制作另一个选择数据库并将其包含在上面所以它就像是
member_id != $member_id
其中$ member_id类似于$ member_id = $ row ['member_id'];
答案 0 :(得分:0)
您需要进行LEFT JOIN并检查table2.member_id是否为空。
答案 1 :(得分:0)
首先,AND
是一个运算符;)
其次,有许多关系运算符暗示逻辑AND,例如intersect,join,product(SQL CROSS JOIN
),限制(SQL WHERE
,扩展(SQL AS
子句)和匹配/差异(SQL MATCH
或EXISTS
或IN
)。
第三,从你的第一句开始,我宁愿认为你正在寻找暗示逻辑上的关系运算符,即非存在性限定。同样,有很多选择,例如减去(SQL EXCEPT
),不匹配/半差异(SQL NOT EXISTS
或NOT IN
,但奇怪的是不是NOT MATCH
!);就个人而言,我发现OUTER JOIN
测试空值是最奇怪的(更不用说没有关系)了!
第四,您选择的关系/ SQL产品可能不支持和/或同等优化给定关系代数或SQL标准的所有不同选项。
我个人对semi-difference的选择是NOT EXISTS
:名称明确暗示非存在性限定,谓词在SQL代码中位于一起,得到广泛支持并且通常得到很好的优化:
SELECT *
FROM table1
WHERE NOT EXISTS (
SELECT *
FROM table2
WHERE table2.member_id = table1.member_id -- predicates close together
);