从一个表中返回记录,其中在另一个表中找不到字段

时间:2012-06-19 17:43:16

标签: mysql

我迷失在这里,我甚至不知道如何最好地标题我的问题。

我正在创建一个简单的约会网站。我希望女性能够像所有其他约会网站一样阻止男性。发生这种情况时,我不希望在查询中返回女性的个人资料。

表A. 包含所有配置文件信息的成员表,包括成员名称 表B. 被封锁的成员表,其中包含该女子封锁男子的每个案件的女子姓名和男子姓名

所以,我想要这样的东西: $ query =返回表A中性别=女性的所有记录,表B中没有包含女性姓名和男性姓名的记录

我以为我会针对表B运行查询来检索所有阻止我的女性,然后针对表A运行查询以返回所有女性,其中女性的用户名未包含在我的第一个查询的结果中。但是,我无法弄清楚如何做到这一点。

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题...似乎是一个简单的加入,不是吗?不确定我是否误解了。也许是这样的事情:

SELECT * FROM Table1 WHERE Table1.ID NOT IN (SELECT BLOCK_ID FROM table2)

所以Table1拥有女性的所有ID,Table2拥有所有阻止ID(例如),你想要的不是那个?显然,需要进行一些更改。

答案 1 :(得分:0)

如果您想查看阻止当前用户的所有女性成员的列表,您可以使用如下查询:

SELECT member.*
FROM TableA member
JOIN TableB blocked ON (member.name = blocked.user_who_blocked)
WHERE member.sex = female
    AND blocked.blocked_user_name = 'Joe McCurrentUser'
;

因此,如果您想要查看的用户集,请使用LEFT JOIN并查找空ID。

SELECT member.*
FROM TableA member
LEFT JOIN TableB blocked ON (member.name = blocked.user_who_blocked)
WHERE member.sex = female
    AND blocked.blocked_user_name = 'Joe McCurrentUser'
    AND blocked.id IS NULL
;

您可以根据需要修改表格中的实际列。确保该表中的user_who_blocked和blocked_user_name列都有索引。

答案 2 :(得分:0)

这会有用吗?

Select * from Table A
inner join Table B on a.womans_name = B.womans_name and B.mans_name="Mans Name"
where B.womans_name IS NULL

如果表B包含匹配的womans_name和mans_name的记录,则连接将创建一个记录,其中包含表A和表B中的所有字段 Where子句将拒绝此记录,因为womans_name表B中的不会为空。如果表B不包含匹配的记录,那么所有这些字段都将为空(包括B.womans_name),因此满足Where子句。