MySQL从两个表中选择行,即使只有一个表可能有行

时间:2012-11-06 14:25:00

标签: mysql sql inner-join

我有两个表,postspagesposts表的列数多于pages表,但除了它们在模式方面相同之外。

如果给出slug,则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

2 个答案:

答案 0 :(得分:6)

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

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

UNION

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

答案 1 :(得分:3)

如果你想要将两个表一起搜索,那么你真的想要使用UNION(而不是JOIN)。

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