Mysql 选择其他表中不匹配的行
这个查询一开始似乎很简单Mysql 选择其他表中不匹配的行,mysql,Mysql,这个查询一开始似乎很简单 #table - user user_id - full_name - image 1 Jon-1 Jon-placeholder.png 2 Aax-2 Max-placeholder.png 3 Lie-3 Lie-placeholder.png 4 Man-4 Man-placeholder.png 5 Nik-5
#table - user
user_id - full_name - image
1 Jon-1 Jon-placeholder.png
2 Aax-2 Max-placeholder.png
3 Lie-3 Lie-placeholder.png
4 Man-4 Man-placeholder.png
5 Nik-5 Nik-placeholder.png
6 Led-6 Led-placeholder.png
7 Neo-7 Neo-placeholder.png
#table - user_contacts
id - user_id - contacts_id - created_date
1 1 2 2020-02-26 08:43:26
2 1 3 2020-02-26 08:43:26
3 1 5 2020-02-26 08:43:26
4 3 4 2020-02-26 08:43:26
5 3 5 2020-02-26 08:43:26
6 7 2 2020-02-26 08:43:26
我试图实现的是从user_contacts中检索所有contacts_id,其中user_id不等于user_id=1,用户Jon-1应该是这样的
#retrieved data
user_id - full_name - image
4 Man-4 Man-placeholder.png
6 Led-6 Led-placeholder.png
7 Neo-7 Neo-placeholder.png
必须检索用户\u id 6,7,4,因为用户\u id=1在“联系人\u id”列下的“用户\u联系人”表中没有这些id
第一个问题
SELECT u.user_id, u.full_name, u.image
FROM user u
NATURAL LEFT JOIN user_contacts cnt
WHERE cnt.contacts_id IS NULL
第二个问题
SELECT user.user_id, user.full_name, user.image
FROM USER
WHERE user.user_id NOT IN (
SELECT user_contacts.contacts_id
FROM user_contacts
WHERE user_contacts.contacts_id IS NOT NULL)
第三个问题
SELECT u.user_id, u.full_name, u.image
FROM user u
NATURAL LEFT JOIN user_contacts cnt
WHERE cnt.contacts_id IS NULL
不存在以下情况:
如果子查询中没有用户id:子查询将获得user=1的联系人
用户id 1:这确保未选择用户1。对于我来说,结果必须是4、5和2。我无法假设为什么结果中会出现Led-6?草莓色。不,他们没有解决问题。你能再次检查你的预期结果吗?如果你检查我上面的帖子。您可以看到检索到的数据这是正确的检索到的数据,因此我尝试了上面的所有查询,大多数查询都检索到了错误的数据。感谢您,它工作正常。现在它返回用户ID 4,6,7@ShareKnowledge如果不是的话,我就不会发了-
SELECT a.*
FROM user a
LEFT
JOIN
( SELECT uc.*
FROM user u
JOIN user_contacts uc
ON uc.user_id = u.user_id
WHERE u.full_name = 'Jon-1'
) b
ON b.contacts_id = a.user_id
WHERE a.full_name <> 'Jon-1'
AND b.id IS NULL;
| user_id | full_name | image |
| ------- | --------- | ------------------- |
| 4 | Man-4 | Man-placeholder.png |
| 6 | Led-6 | Led-placeholder.png |
| 7 | Neo-7 | Neo-placeholder.png |
SELECT
user_id, full_name, image
FROM
user
WHERE NOT user_id in (SELECT contacts_id from user_contacts WHERE user_contacts.user_id=1)
AND user_id <> 1
SELECT a.*
FROM user a
LEFT
JOIN
( SELECT uc.*
FROM user u
JOIN user_contacts uc
ON uc.user_id = u.user_id
WHERE u.full_name = 'Jon-1'
) b
ON b.contacts_id = a.user_id
WHERE a.full_name <> 'Jon-1'
AND b.id IS NULL;