2010-07-19 160 views
1

在繞過此查詢時有心理障礙。Mysql多對多查詢

我有以下表格:

review_list:已大部分數據,但在這種情況下,唯一重要的是REVIEW_ID,該記錄的ID,我目前(INT)感興趣 variant_list:模型(VARCHAR),啓用(布爾)
variant_review:模型(VARCHAR),身份證(INT)

variant_review是一個多對多表中review_list的REVIEW_ID鏈接到模型(一個或多個)在variant_l中IST審查和包含(例如):

.. 
test1,22 
test2,22 
test4,22 
test1,23 
test2,23... etc 

variant_list是所有可能的型號列表以及它們是否被啓用,包含(例如):

test1,TRUE 
test2,TRUE 
test3,TRUE 
test4,TRUE 

什麼我是在MySQL後是查詢給定一個REVIEW_ID時(即,22)將返回一個結果,將列出在variant_review.model每個值,以及是否存在針對給定REVIEW_ID如:

test1,1 
test2,1 
test3,0 
test4,1 

或類似,這是我在f用一些複選框列出一些類型的網頁。這將顯示所有的型號以及是否每一個存在於表

+1

我無法理解你在找什麼。它不會傷害到冗長。類似於每個表格的模式可能會幫助您找到解決方案。以及您想要的結果集的兩個值是什麼...... – FlyingStreudel 2010-07-19 15:34:25

+0

如果列舉您的樣本數據和樣本輸出中顯示的列,這會很有幫助。 – Thomas 2010-07-19 15:35:08

+0

對不起,問題已經更新,以提供更清晰的問題和示例數據輸入和輸出 – Woody 2010-07-19 15:56:22

回答

2

鑑於對列名更多的信息:

Select variant_list.model 
    , Case When variant_review.model Is Not Null Then 1 Else 0 End As HasReview 
From variant_list 
    Left join variant_review 
     On variant_review.model = variant_list.model 
      And variant_review.review_id = 22 

只是爲了保持完整性,如果是這樣的話,你可以有在variant_review臺相同型號和REVIEW_ID多行,那麼你需要以不同的方式做到這一點:

Select variant_list.model 
    , Case 
     When Exists (
        Select 1 
        From variant_review As VR 
        Where VR.model = variant_list.model 
         And VR.review_id = 22 
        ) Then 1 
     Else 0 
     End 
From variant_list 
+0

謝謝你,但我認爲我的問題是錯誤的。我已更新問題以清楚說明我正在努力實現的目標 – Woody 2010-07-19 15:57:26

+0

@Woody - 我修改了我的解決方案。這將從variant_list獲得所有值,並且如果給定的review_id有值。我假設model和review_id的組合只能在variant_review表中出現一次(即,對於model和review_id,您不能有兩行具有相同的值)。 – Thomas 2010-07-19 16:08:29

+0

第一個是好的,組合應該永遠不會再出現。 非常感謝,救了我很多麻煩! – Woody 2010-07-19 21:37:17