检查行是否有特定的孩子加入
Check if row has specific childs on join
我想创建一个 SQL 来获取名称为 Mark
并且是 post 的作者且 ID 为 1
和 [=15] 的用户=].
注意:我需要检查多少 post 是未知的。因此它可能需要使用 PHP.
生成 SQL 查询的那一部分
如何做到这一点?
用户Table:
+----+----------+
| id | name |
+----+----------+
| 1 | Mark |
| 2 | John Doe |
+----+----------+
帖子Table
+----+-------------+-------------+
| id | text | author_id |
+----+-------------+-------------+
| 1 | First Post | 1 |
| 2 | Second Post | 2 |
| 3 | Last Post | 1 |
+----+-------------+-------------+
这只是一个使用案例,并非真实数据。
注意:我知道如何检查用户是否是一个 post 的作者,但不能在同一行中检查多个。所以基本上这就是我需要帮助的地方,我想它一定是 left join
.
为了检查名为 Mark
的用户并检查他是否是 post id 1
的作者,我执行以下操作:
SELECT users.*
FROM users
INNER JOIN posts
ON users.id = posts.author_id
WHERE
users.name = 'Mark'
&&
posts.author_id` = 1
我刚刚从 users
中选择了 id
。如果您需要更多列,只需将其添加到 select
和 group by
子句即可。
SELECT users.id
FROM users
INNER JOIN posts ON users.id = posts.author_id
WHERE users.name = 'Mark'
AND posts.author_id in (1,3)
GROUP BY users.id
HAVING count(distinct posts.author_id) = 2
使用子查询仅查找同时具有 1 和 3 的用户:
SELECT users.*
FROM users
WHERE users.name = 'Mark'
and 2 = (select count(distinct posts.id)
where users.id = posts.author_id
and posts.id IN (1,3))
SELECT users.name, posts.posts, posts.authorid
FROM users INNER JOIN posts ON users.id = posts.authorid where posts.authorid = 1
您需要使用 HAVING
子句才能达到预期结果:
SELECT users.name
FROM users
INNER JOIN posts
on users.id = posts.author_id
WHERE users.name = 'Mark'
GROUP BY users.name
HAVING COUNT(posts.author_id) > 1
我想创建一个 SQL 来获取名称为 Mark
并且是 post 的作者且 ID 为 1
和 [=15] 的用户=].
注意:我需要检查多少 post 是未知的。因此它可能需要使用 PHP.
生成 SQL 查询的那一部分如何做到这一点?
用户Table:
+----+----------+
| id | name |
+----+----------+
| 1 | Mark |
| 2 | John Doe |
+----+----------+
帖子Table
+----+-------------+-------------+
| id | text | author_id |
+----+-------------+-------------+
| 1 | First Post | 1 |
| 2 | Second Post | 2 |
| 3 | Last Post | 1 |
+----+-------------+-------------+
这只是一个使用案例,并非真实数据。
注意:我知道如何检查用户是否是一个 post 的作者,但不能在同一行中检查多个。所以基本上这就是我需要帮助的地方,我想它一定是 left join
.
为了检查名为 Mark
的用户并检查他是否是 post id 1
的作者,我执行以下操作:
SELECT users.*
FROM users
INNER JOIN posts
ON users.id = posts.author_id
WHERE
users.name = 'Mark'
&&
posts.author_id` = 1
我刚刚从 users
中选择了 id
。如果您需要更多列,只需将其添加到 select
和 group by
子句即可。
SELECT users.id
FROM users
INNER JOIN posts ON users.id = posts.author_id
WHERE users.name = 'Mark'
AND posts.author_id in (1,3)
GROUP BY users.id
HAVING count(distinct posts.author_id) = 2
使用子查询仅查找同时具有 1 和 3 的用户:
SELECT users.*
FROM users
WHERE users.name = 'Mark'
and 2 = (select count(distinct posts.id)
where users.id = posts.author_id
and posts.id IN (1,3))
SELECT users.name, posts.posts, posts.authorid FROM users INNER JOIN posts ON users.id = posts.authorid where posts.authorid = 1
您需要使用 HAVING
子句才能达到预期结果:
SELECT users.name
FROM users
INNER JOIN posts
on users.id = posts.author_id
WHERE users.name = 'Mark'
GROUP BY users.name
HAVING COUNT(posts.author_id) > 1