0

booksusersbooks_usersテーブルがあります。

今、私は自分(user_id = 3)と他のユーザー(user_id = 18)によって管理されている本を手に入れたいと思っています。

SELECT *
FROM books as Book
LEFT JOIN books_users as BookUser
    ON BookUser.book_id = Book.id
WHERE
    Book.user_count = 2 AND
    BookUser.user_id = 3 AND
    BookUser.user_id = 18

問題:左結合は本の結果を行に分割するため、2人のユーザーに行が表示されません...

4

3 に答える 3

1

BookUserテーブルに2回参加して両方の条件を取得し、DISTINCTを使用して本を1回取得したいと思います。

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
于 2013-02-04T21:28:27.470 に答える
1
SELECT *
  FROM books as B
 INNER JOIN books_users as BU1
    ON BU1.book_id = B.id
 INNER JOIN books_users as BU2
    ON BU2.book_id = B.id
 WHERE B.user_count = 2
   AND BU1.user_id = 3
   AND BU2.user_id = 18
于 2013-02-04T21:28:52.647 に答える
0

user_count列についてはわかりません。

これにより、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) 

また

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)

編集:これにより、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
于 2013-02-04T21:30:50.157 に答える