1

我有一张桌子Books,里面有很多properties. 属性存储为键和值。

因此,如果书籍是:

1  LOTR
2  Harry Potter 1
3  Harry Potter 2

并且属性是

id  book_id  key        value
1   1        available  0
2   2        available  10
3   2        author     Rowling
4   3        author     Rowling

我想得到如下结果:

1  LOTR
3  Harry Potter 2

因为 Book id 1 的可用性为 0,而 2 的可用性为 10,而 3 没有任何可用性信息。

我知道我可以使用反连接,但我不知道如何使用它。我对反连接有点陌生。

任何帮助表示赞赏。

4

3 回答 3

3

我不是 100% 确定我理解你的问题,但假设你想退回所有在properties表格中没有可用的书籍,那么这里有一个使用 的选项outer join

select b.*
from books b
   left join properties p on b.id = p.book_id and p.key = 'available' and p.value > 0
where p.id is null

根据您的数据库,您可能需要cast在.valuejoin

于 2016-06-27T18:20:13.433 回答
0

尝试这个:

SELECT b.book_id, a.key, a.value
FROM Books AS B INNER JOIN AnotherTable AS A B.book_id = a.book_id
WHERE a.key = 'available' and (a.value = 0 OR a.value is null)
于 2016-06-27T18:20:07.473 回答
0
SELECT book_id, title
FROM Books as B
WHERE B.book_id NOT IN (
                SELECT P.book_id 
                FROM properties as P
                WHERE P.key = available AND P.value <> 0)

请注意,这<>意味着NOT EQUAL

于 2016-06-27T18:23:15.963 回答