【问题标题】:MySQL select row from two tables even though only one table may have the rowMySQL 从两个表中选择行,即使只有一个表可能有该行
【发布时间】:2012-11-06 14:25:00
【问题描述】:

我有两张桌子,postspagesposts 表比pages 表有更多的列,但除此之外,它们在架构方面是相同的。

如果给出slug,则slug 右侧的行可能存在于pages 表或posts 表中。我在想类似的东西

SELECT * 
FROM pages 
WHERE slug = 'about'

UNION 

SELECT * 
FROM posts 
WHERE slug = 'about'

但这要求带有“about”的slug 的行在两个表中都存在。可能有一个简单的INNER JOIN 可以使用,但我的SQL 知识有限。

为了澄清,我希望能够在两个表中进行搜索,就好像它们是一个表一样。

这是posts的表结构:

`slug` varchar(128) NOT NULL,
`id` varchar(100) NOT NULL,
`title` text NOT NULL,
`published` bigint(20) NOT NULL,
`content` longtext NOT NULL,
`author` text NOT NULL,
`status` enum('published','draft','trashed') NOT NULL

pages 结构:

`slug` varchar(128) NOT NULL,
`id` varchar(100) NOT NULL,
`title` text NOT NULL,
`content` longtext NOT NULL,
`menu_order` int(11) DEFAULT NULL,
`status` enum('published','drafted','trashed') NOT NULL

【问题讨论】:

  • 我认为你在这里使用UNION 是正确的......我一定是错过了什么
  • @lc。 UNION 仅在为每个表返回的列数相同且数据类型相同时才有效。根据上面的描述,SELECT * 不适用于UNION,因为一个表的列比另一个表多,除非它们限制了返回的列。
  • 请贴出两张表的结构以及是否有样本数据。
  • @bluefeet True,这可能正是 OP 所缺少的。我只是在考虑使用联合与联接。

标签: mysql sql inner-join


【解决方案1】:

你可以使用 union 但你需要指定列 (col1,col2,..) 这两个列表应该是相同的:

SELECT col1,col2,.. 
FROM pages 
WHERE slug = 'about' 

UNION

SELECT col1,col2,.. 
FROM posts 
WHERE slug = 'about'

【讨论】:

    【解决方案2】:

    如果您想搜索两个表,就好像它们是一个表一样,您真的想使用 UNION(而不是 JOIN)。

    您上面的查询可能会失败,因为表有不同的列。您应该在两个子查询中指定列名。

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多