2010-06-14 66 views
0

這裏COUNT是我目前擁有的代碼:從表中選擇2個行時另一個表

SELECT `A`.* 
    FROM `A` 
LEFT JOIN `B` ON `A`.`A_id` = `B`.`value_1` 
    WHERE `B`.`value_2` IS NULL 
     AND `B`.`userid` IS NULL 
ORDER BY RAND() LIMIT 2 

什麼它目前應該做的是選擇2行從A當所選擇的兩行A_id是不在value_1value_2B。並且B中的行特定於具有userid的個人用戶。

我需要做的就是讓它也讓還檢查是否已經有N行中B一個A_id(在value_1,或value_2)和userid匹配,如果有N多行多,這不是不要選擇A行。

回答

1

下將處理您的第一個請求:把戲的

Select ... 
From A 
    Left Join B 
     On (B.value_1 = A.A_id Or B.value_2 = A.A_id) 
      And B.userid = @userid 
Where B.<non-nullable column> Is Null 

部分正在您的標準到左連接的ON子句。我不確定您的請求的第二部分如何適合第一部分。如果B中沒有與給定用戶的value_1或value_2匹配的行,則根據定義,行計數將爲零。是否你希望它是在給定的條件下只能有最大數量的B行匹配的情況?如果是這樣,那麼我會寫我的問題,如下所示:

Select ... 
From A 
Where (
     Select Count(*) 
     From B B2 
     Where (B2.value_1 = A.A_id Or B2.value_2 = A.A_id) 
      And B2.userid = @userid 
     ) <= @MaxItems 
+0

謝謝Thomas! 它的工作,大部分。除了我有時在同一行返回兩次(它不應該有相同的行返回兩次),有時它返回行「B2.value_1 = A.A_id或B2.value_2 = A.A_id'」應該阻止它這樣做。通常情況下,他們似乎在不同的順序。 – Marcus 2010-06-15 05:26:22

+0

@Marcus - 從哪個查詢?第一個查詢不應該爲A返回多個PK值。如果您認爲它多次返回同一行(同一行?),您能向我們展示一些示例輸入和它正在生成的輸出嗎? – Thomas 2010-06-15 14:45:23

+0

哦,我明白我的所作所爲......我誤解了你,並將你的疑問和你的疑問結合起來......哎呀。我現在已經開始工作了。再次感謝! – Marcus 2010-06-15 21:04:14

相關問題