【发布时间】:2012-11-06 14:25:00
【问题描述】:
我有两张桌子,posts 和 pages。 posts 表比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