检查一个和/或另一个表是否在同一查询中包含特定值?

时间:2012-09-07 08:50:08

标签: mysql sql

我正在尝试检查我的两个tables中的任何一个是否包含content_key列中的特定值。一个表用于公共内容(content),另一个表用于提交(content_submissions)。当用户向我们提交内容(YouTube视频ID等)时,我想检查它是否已经提交给我们,无论是在公共表还是私有(提交)表中。这样,我们最终不会在提交过程中接受相同内容的重复。

这两个表格看起来像这样。

content

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

content_submissions

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

因此,当用户提交密钥e2CJgQjH5lEBOtcpPVNvhA时(在不同时间),我希望查询告诉我密钥已经存在于数据库中。

我不仅在active表中有content列而不是有两个表的原因是因为每次不接受内容时它会显着增加id,使网址成为有点随机,而不是顺序。

4 个答案:

答案 0 :(得分: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 :(得分:1)

SELECT COUNT(*)
FROM
    (Select content_key from content union select content_key from content_submissions) v
WHERE content_key = 'new key'

答案 2 :(得分:0)

select id from content
where content.content_key="myKey"
UNION
select id from content_submissions
content_submissions.content_key="myKey"

答案 3 :(得分: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的默认行为是从中删除重复的行   结果。