我有两个表,posts
和pages
。 posts
表的列数多于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
答案 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)。
上面的查询可能会失败,因为表格有不同的列。您应该在两个子查询中指定列名称。