2014-01-24 70 views
0

這實際上是一個由兩部分組成的問題,但爲了不混淆,我將分成兩個實際問題。這一個是關於選擇在多到很多相關的表基於值的行創建正確的SQL語句:根據多對多關係選擇SQL查詢

enter image description here

現在的問題是:什麼是讓所有的絕對簡單的方法resources其中例如metadata.category =主題AND該類別的相應metadata.value ='介紹'?我確信這可以通過很多不同的方式完成,但我是SQL的新手,所以請儘可能提供最簡單的方法...(如果您可以簡單地描述語句在純英語也會很棒,我已經看過SQL的介紹,但是我沒有發現(對於初學者)進入這些多對多的選擇。)

回答

1

最簡單的方法是使用EXISTS子句。我更熟悉MSSQL,但這應該是接近

SELECT * 
FROM resources r 
WHERE EXISTS (
    SELECT * 
    FROM metadata_resources mr 
     INNER JOIN metadata m ON (mr.metadata_id = m.id) 
    WHERE mr.resource_id = r.id AND m.category = 'subject' AND m.value = 'introduction' 
) 

翻譯成英文,它是「回到我的所有記錄這個子查詢返回的一個或多個行,但不返回數據的那些行」。該子查詢通過使用外部行作爲謂詞值的謂詞mr.resource_id = r.id與外部查詢相關聯。

我敢肯定,你可以圍繞谷歌爲EXIST聲明

+0

好,感謝更多的例子,但我一直沒能使其工作......如果這是MSSQL和MySQL我不之間的差異不知道,但我無法修復它... – Anders

+0

您可以嘗試刪除別名並執行完全限定的表名(將rx更改爲resources.x,mr.x = metadata_resources.x等)。我敢肯定,mysql支持exists條款,雖然 –

+0

你也可以嘗試'選擇1'在存在,而不是'select *' –