0

tables2 つの列のいずれかに特定の値が含まれているかどうかを確認しようとしていcontent_keyます。1 つのテーブルはパブリック コンテンツ ( content) 用で、もう 1 つは提出用 ( content_submissions) です。ユーザーがコンテンツ (YouTube ビデオ ID など) を送信するとき、それが既に送信されているかどうか、公開テーブルにあるか非公開 (送信) テーブルにあるかを確認したいと考えています。このようにして、送信プロセス中に同じコンテンツの重複を受け入れることはありません。

2 つのテーブルは次のようになります。

content

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

content_submissions

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

そのため、ユーザーがキーを送信したとき、e2CJgQjH5lEまたはBOtcpPVNvhA(別の時点で) キーがデータベースに既に存在することをクエリに伝えたいと思います。

activeテーブルに 2 つのテーブルではなく、単純に 1 つの列を持たない理由は、contentコンテンツが受け入れられないたびに ID が大幅に増加し、URL が少しランダムになり、シーケンシャルではなくなるためです。

4

4 に答える 4

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デモ

お役に立てれば。

ここに画像の説明を入力してください

于 2012-09-07T08:53:12.230 に答える
1
SELECT COUNT(*)
FROM
    (Select content_key from content union select content_key from content_submissions) v
WHERE content_key = 'new key'
于 2012-09-07T08:52:53.367 に答える
0
select id from content
where content.content_key="myKey"
UNION
select id from content_submissions
content_submissions.content_key="myKey"
于 2012-09-07T08:53:14.373 に答える
0

使用する場合

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

それはそれをする必要があります。

13.2.8.4から。UNION構文

UNIONは、複数のSELECTステートメントの結果を1つの結果セットに結合するために使用されます。

UNIONのデフォルトの動作では、重複する行が結果から削除されます。

于 2012-09-07T08:54:39.500 に答える