2015-04-06 22 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

相關問題