MySQL 只有 return 来自 tableAU 的用户,如果表中没有特定的值状态?
MySQL only return user from tableA if no specific value status in tableB?
我有一个 table 用户(table 用户)和一个日志 table(table 日志),其中包含关于该用户的日志。现在我正在寻找一种方法来 return 我的用户列表,其中缺少日志中的特定值。
让我们举个例子:
table users table logs
---------------- -----------------------------
| id | user | | id | user_id | status |
---------------- -----------------------------
| 1 | user1 | | 1 | 2 | send |
---------------- -----------------------------
| 2 | user2 | | 2 | 1 | send-error |
---------------- -----------------------------
| 3 | user3 | | 3 | 3 | status-x |
---------------- -----------------------------
| 4 | 1 | send |
-----------------------------
| 5 | 3 | send-error |
-----------------------------
以下加入return给我一个所有用户的列表和日志:
SELECT u.id, u.name, l.status
来自你的用户
LEFT JOIN 日志 l ON u.id = t.user_id</pre>
我怎样才能select只有那些没有状态'send'的?在这个例子中它应该只是 return id=3, user=user3.
SELECT u.id, u.name, l.status
FROM users u
LEFT JOIN logs l ON u.id = l.user_id
WHERE NOT EXISTS (SELECT 1 FROM logs g
WHERE u.id = g.user_id
AND g.status = 'send')
基本上,查看 NOT EXISTS
是否有您想要的查询。如果子查询 return 没有行,则 NOT EXISTS
条件成立,并且该行是 returned.
编辑:
如果您只想查看 logs
table 中哪些用户的状态不是 "send":
SELECT u.id, u.name
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM logs l
WHERE u.id = l.user_id
AND l.status = 'send')
此查询避免了 GROUP BY
仅在每行获取一个用户的需要,如果这就是您想要做的全部。
SELECT u.id, u.user, l.status
FROM users u
LEFT JOIN logs l ON u.id = l.user_id
WHERE l.status not like '%send%'
您已经在执行左联接(假设您想要所有用户以及用户 ID 匹配的那些日志条目)。然后检查状态字段是否缺少单词 'send'.
是一件简单的事情
我有一个 table 用户(table 用户)和一个日志 table(table 日志),其中包含关于该用户的日志。现在我正在寻找一种方法来 return 我的用户列表,其中缺少日志中的特定值。
让我们举个例子:
table users table logs
---------------- -----------------------------
| id | user | | id | user_id | status |
---------------- -----------------------------
| 1 | user1 | | 1 | 2 | send |
---------------- -----------------------------
| 2 | user2 | | 2 | 1 | send-error |
---------------- -----------------------------
| 3 | user3 | | 3 | 3 | status-x |
---------------- -----------------------------
| 4 | 1 | send |
-----------------------------
| 5 | 3 | send-error |
-----------------------------
以下加入return给我一个所有用户的列表和日志:
SELECT u.id, u.name, l.status 来自你的用户 LEFT JOIN 日志 l ON u.id = t.user_id</pre>
我怎样才能select只有那些没有状态'send'的?在这个例子中它应该只是 return id=3, user=user3.
SELECT u.id, u.name, l.status
FROM users u
LEFT JOIN logs l ON u.id = l.user_id
WHERE NOT EXISTS (SELECT 1 FROM logs g
WHERE u.id = g.user_id
AND g.status = 'send')
基本上,查看 NOT EXISTS
是否有您想要的查询。如果子查询 return 没有行,则 NOT EXISTS
条件成立,并且该行是 returned.
编辑:
如果您只想查看 logs
table 中哪些用户的状态不是 "send":
SELECT u.id, u.name
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM logs l
WHERE u.id = l.user_id
AND l.status = 'send')
此查询避免了 GROUP BY
仅在每行获取一个用户的需要,如果这就是您想要做的全部。
SELECT u.id, u.user, l.status
FROM users u
LEFT JOIN logs l ON u.id = l.user_id
WHERE l.status not like '%send%'
您已经在执行左联接(假设您想要所有用户以及用户 ID 匹配的那些日志条目)。然后检查状态字段是否缺少单词 'send'.
是一件简单的事情