Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从3个表中选择并验证一个值_Mysql_Sql - Fatal编程技术网

Mysql 从3个表中选择并验证一个值

Mysql 从3个表中选择并验证一个值,mysql,sql,Mysql,Sql,我已作出以下声明: (SELECT numerocert FROM certificati) UNION (SELECT numeroarbo AS numerocert FROM cert_arbo) UNION (SELECT numeroerba AS numerocert FROM cert_erba) WHERE numerocert = 12 我想看看数字12是否出现在这三个表中,但不明白哪里出了问题。where语句必须连接到call 3个表: SELECT numero

我已作出以下声明:

(SELECT numerocert FROM certificati) 
UNION 
(SELECT numeroarbo AS numerocert FROM cert_arbo) 
UNION 
(SELECT numeroerba AS numerocert FROM cert_erba) 
WHERE numerocert = 12

我想看看数字12是否出现在这三个表中,但不明白哪里出了问题。

where语句必须连接到call 3个表:

SELECT numerocert FROM certificati WHERE numerocert = 12
UNION 
SELECT numeroarbo AS numerocert FROM cert_arbo WHERE numeroarbo = 12
UNION 
SELECT numeroerba AS numerocert FROM cert_erba WHERE numeroerba = 12
或者您可以使用外部查询:

select numerocert from (
  (SELECT numerocert FROM certificati) 
  UNION 
  (SELECT numeroarbo AS numerocert FROM cert_arbo) 
  UNION 
  (SELECT numeroerba AS numerocert FROM cert_erba) 
)
WHERE numerocert = 12

您需要将联合的结果包装到一个表中,然后对该表应用查询

查询失败的原因已在另一个答案中给出。这是另一种方法

您想知道其中一个表中是否存在值。但是,您可以从所有表中进行选择,粘贴它们的结果并消除重复项,而不是使用
EXISTS
(或
中的
)。这里有一种选择12的方法,如果在任何表中找到12(优化器可以应用一种算法,只在找到第一个匹配之前读取):


一般来说(对于所有RDBMS),使用第一种解决方案不是更安全吗?因为这不需要系统的任何改进。第二种解决方案可以返回大量行,并使用
联合
完成大量检查。因此,这可能会花费大量内存和内存processing@AxelH:是的,那是真的。对于第二个查询,我们将依靠优化器看穿这一点并制定更好的执行计划。这是一种只需键入12的方法(因此,一旦我们想将其更改为13,我们只需在一个地方更改它,即查询不太容易出错)。我喜欢这种表示法,因为它可以降低查询的成本(至少我相信它会,不知道
的成本)并限制参数(12)去一个地方。
    Select *
    From

    (SELECT numerocert FROM certificati 

UNION 

    SELECT numeroarbo AS numerocert FROM cert_arbo

    UNION

     SELECT numeroerba AS numerocert FROM cert_erba)  tab
    WHERE numerocert = 12
select numerocert 
from (select 12 as numerocert) t
where numerocert in (select numerocert from certificati) 
   or numerocert in (select numeroarbo from cert_arbo) 
   or numerocert in (select numeroerba from cert_erba) 
;