【问题标题】:Querying two tables with an union使用联合查询两个表
【发布时间】:2012-11-27 17:34:21
【问题描述】:

我有一个非常简单的 mysql 查询,我想从两个表 table1 和 table2 中获取一些“数据”,只要这个“数据”在包含精确“id”的一行中,所以我运行了一个准备好的请求:

'select data from (
    select data from table1 union select data from table2) 
 where id = :id'

但它似乎不起作用(顺便说一句,我只是尝试了'select data from table1, table2 where id = :id ') 但它没有用。有人可以帮忙,我不知道我错过了什么?

【问题讨论】:

  • 这不是有效的 sql ... 除非 'data' 是列名
  • 我是从教程中抓到的,为什么没有呢? (抱歉我对sql还不熟悉)
  • 从这里开始:w3schools.com/sql/default.asp

标签: mysql datatable


【解决方案1】:

我认为您正在寻找的是加入。连接有多种类型,其中最常见的是LEFT JOININNER JOIN

LEFT JOIN返回行,即使匹配的数据不存在,对连接的数据返回null。

INNER JOIN 要求匹配的数据存在,如果匹配的数据不存在则不返回任何内容。

使用INNER JOIN的示例:

SELECT
   table1.*,
   table2.*
FROM
   table1
   INNER JOIN table2 ON ( table1.id = table2.id )
WHERE
   id = :id

【讨论】:

  • 不,我需要一个联合,因为我想从 table1 和 table2 中选择相同的“数据”
  • 我不明白为什么要使用union,如果你要做的是从table1和table2中获取数据,其中table2中的ID为1,而table1中的ID为1 ,你可以使用JOIN。您发布的 sql 中没有任何内容需要您使用 UNION。
  • 当然不是很了解IINER JOIN流程,会不会返回
  • 如果使用INNER JOIN table2 ON ( table1.id = table2.id ),并且id=1,table2.id[1]必须存在,否则返回0行。
【解决方案2】:

Select table1.data, table2.data from table1 where table1.id = table2.id

【讨论】:

  • 不,我需要获取 table1 和 table2 中出现的相同“数据”
  • 当然,我不了解 INNER JOIN 过程,在这种情况下,每一行会返回什么,对于每次出现的 id ,我都会有一个包含两个“数据”副本的行?
【解决方案3】:
 select * from table1  where id = :id
 union all
 select * from table2  where id = :id

【讨论】:

    【解决方案4】:

    在 MySQL 中联合是复杂且没有根据的,我宁愿依靠 JOIN 来执行我的语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2023-04-06
      • 2014-04-07
      相关资源
      最近更新 更多