2012-09-07 32 views
0

我試圖檢查我的兩個tables中的任何一個在content_key列中是否包含特定值。一個表格用於公開內容(content),另一個表格用於提交(content_submissions)。當用戶向我們提交內容(YouTube視頻ID等)時,我想檢查它是否已經提交給我們,無論是在公共表格還是私人(提交)表格中。這樣我們就不會在提交過程中接受相同內容的重複。檢查一個和/或另一個表是否在同一查詢中包含特定值?

這兩張表看起來像這樣。

content

*----*-------------* 
| id | content_key | 
*----*-------------*  
| 1 | sOWewQO3hpg | 
*----*-------------* 
| 2 | e2CJgQjH5lE | 
*----*-------------* 

content_submissions

*----*-------------* 
| id | content_key | 
*----*-------------*  
| 1 | BOtcpPVNvhA | 
*----*-------------* 

因此,當用戶提交鍵e2CJgQjH5lEBOtcpPVNvhA(在不同的時間),我想查詢告訴我,關鍵是已經在數據庫。

我之所以不簡單地在content表中有一個active列而不是有兩個表,是因爲它會在每次內容不被接受時顯着增加id,使urls有點隨機而不是順序。

回答

4

您可以使用UNION

SELECT COUNT(content_key) 
FROM 
    (
     SELECT content_key 
     FROM content 
     UNION 
     SELECT content_key 
     FROM content_submissions 
    ) a 
WHERE content_key = 'valHere' 

它只是返回0如果你正在尋找的值不存在,否則匹配將是記錄總數合併兩個表中的行所示。

SQLFiddle Demo

希望這有助於。

enter image description here

1
SELECT COUNT(*) 
FROM 
    (Select content_key from content union select content_key from content_submissions) v 
WHERE content_key = 'new key' 
0
select id from content 
where content.content_key="myKey" 
UNION 
select id from content_submissions 
content_submissions.content_key="myKey" 
0

如果你使用

SELECT * 
FROM content 
WHERE content_key = value 
UNION 
SELECT * 
FROM content_submissions 
WHERE content_key = value 

應該這樣做。

13.2.8.4. UNION Syntax

UNION用於將結果從多個SELECT語句 組合成單個結果集。

UNION的默認行爲是從 結果中刪除重複的行。

相關問題