Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带左连接的条件筛选_Mysql_Join_Conditional Statements - Fatal编程技术网

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
使它每本书只返回一行,而不是两行。你说得对。我想它仍然会有两行,但这是最初的问题,我们现在已经过了这个阶段。
不同的
是多余的。您的查询将返回不正确的结果。示例:一本书a
user\u id
s
3
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