Mysql 带左连接的条件筛选
我有一个Mysql 带左连接的条件筛选,mysql,join,conditional-statements,Mysql,Join,Conditional Statements,我有一个books、users和一个books\u users表 现在,我想得到一本由我(user_id=3)和其他用户(user_id=18)管理的书: 问题: 由于左联接将书籍的结果拆分为行,因此它不会给出包含两个用户的行…我相信您希望两次联接到BookUser表以获得这两个条件,并使用DISTINCT获得一次书籍: SELECT DISTINCT Book.* FROM books as Book LEFT JOIN books_users as BookUser1 ON Book
books
、users
和一个books\u users
表
现在,我想得到一本由我(user_id=3)和其他用户(user_id=18)管理的书:
问题:
由于左联接将书籍的结果拆分为行,因此它不会给出包含两个用户的行…我相信您希望两次联接到BookUser表以获得这两个条件,并使用DISTINCT获得一次书籍:
SELECT DISTINCT Book.*
FROM books as Book
LEFT JOIN books_users as BookUser1
ON BookUser.book_id = Book.id
LEFT JOIN books_users as BookUser2
ON BookUser.book_id = Book.id
WHERE
Book.user_count = 2 AND
BookUser1.user_id = 3 AND
BookUser2.user_id = 18
我不知道用户计数列 这就提供了3人或18人使用的书籍
SELECT *
FROM books as Book
INNER JOIN books_users as BookUser
ON BookUser.book_id = Book.id
WHERE
Book.user_count = 2 AND
BookUser.user_id IN (3,18)
或
编辑:这提供了3和18都使用的书籍
SELECT book.*
FROM books as Book
INNER JOIN books_users as BookUser1
ON BookUser1.book_id = Book.id
INNER JOIN books_users as BookUser2
ON BookUser2.book_id = Book.id
WHERE
Book.user_count = 2 AND
BookUser1.user_id = 3 AND
BookUser2.user_id = 18
BookUser.user_id
怎么可能同时是3岁和18岁?@Andrew这只是他希望它工作的一个例子。我相信他正在寻找一本书
,它正好有2个图书用户
s,用户id为3
和18
。我不理解左连接和区分的必要性?@nitimidha左连接
是有争议的,但是DISTINCT
使它每本书只返回一行,而不是两行。你说得对。我想它仍然会有两行,但这是最初的问题,我们现在已经过了这个阶段。不同的
是多余的。您的查询将返回不正确的结果。示例:一本书auser\u id
s3
和5
。它有3或18
和2
@G-Nugget的用户计数,我被一个变量有两个值弄糊涂了。但请重新阅读问题和评论。更新了答案。
SELECT *
FROM books as Book
INNER JOIN books_users as BookUser
ON BookUser.book_id = Book.id
WHERE
Book.user_count = 2 AND
BookUser.user_id IN (3,18)
SELECT *
FROM books as Book
INNER JOIN books_users as BookUser
ON BookUser.book_id = Book.id
WHERE
Book.user_count = 2 AND
(BookUser.user_id = 3 OR BookUser.user_id = 18)
SELECT book.*
FROM books as Book
INNER JOIN books_users as BookUser1
ON BookUser1.book_id = Book.id
INNER JOIN books_users as BookUser2
ON BookUser2.book_id = Book.id
WHERE
Book.user_count = 2 AND
BookUser1.user_id = 3 AND
BookUser2.user_id = 18