2015-04-06 51 views
0

我如何得到那些属于国家79和笔者80和出版商的图书编号91如何获得对多列值的数据匹配在同一个表

SELECT id FROM books WHERE ( 
    (filter = 'country' AND cat = 79) 
     AND 
    (filter = 'author' AND cat = 80) 
     AND 
    (filter = 'publisher' AND cat = 91) 
    ) 

这里是我的表结构

+----+----------+-----+ 
| ID | FITER | CAT | 
+----+----------+-----+ 
| 1 | country | 79 | 
| 1 | author | 80 | 
| 1 | publisher| 91 | 
| 2 | country | 476 | 
| 2 | author | 85 | 
| 2 | publisher| 121 | 
+----+----------+-----+   

谢谢

+0

所以,你想获得这张表的前3条记录?或者你想从其他表中获取信息? – dotnetom

+0

@dotnetom:我想只是得到id 1 – Mic

回答

2

这是这种表结构的问题,你真的有那么多的过滤器,他们不能对自己列?无论如何,这将是这样的:

SELECT DISTINCT id 
FROM books b 
WHERE filter = 'country' AND cat = 79 
AND EXISTS(SELECT 1 FROM books 
      WHERE filter = 'author' AND cat = 80 
      AND id = b.id) 
AND EXISTS(SELECT 1 FROM books 
      WHERE filter = 'publisher' AND cat = 91 
      AND id = b.id); 
+0

你能解释一下SELECT 1 FROM ...吗? – Mic

+0

@Mic'EXISTS'检查它是否返回一行,它与'SELECT'中的内容无关,所以我选择'SELECT 1'来显式地显示我不需要内部表中的任何列,只是为了检查存在 – Lamak

+0

工作就像一个魅力。谢谢 :) – Mic

相关问题