3

我有两张桌子,postspages。该posts表的列比pages表多,但除此之外,它们在模式方面是相同的。

如果slug给定 a ,则具有正确的行slug可能存在于pages表中,也可能存在于posts表中。我在想类似的东西

SELECT * 
FROM pages 
WHERE slug = 'about'

UNION 

SELECT * 
FROM posts 
WHERE slug = '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
4

2 回答 2

7

您可以使用联合,但您需要指定列(col1,col2,..),这两个列表应该相同:

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

UNION

SELECT col1,col2,.. 
FROM posts 
WHERE slug = 'about'
于 2012-11-06T14:29:31.383 回答
3

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

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

于 2012-11-06T14:31:23.347 回答