MySQL从两个表中选择行,即使只有一个表可能有该行
我有两个表,MySQL从两个表中选择行,即使只有一个表可能有该行,mysql,sql,inner-join,Mysql,Sql,Inner Join,我有两个表,posts和pages。posts表的列数比pages表的列数多,但除此之外,它们在模式方面是相同的 如果给出了slug,则pages表或posts表中可能存在带有右侧slug的行。我在想类似的事情 SELECT * FROM pages WHERE slug = 'about' UNION SELECT * FROM posts WHERE slug = 'about' 但这要求两个表中都有slug为“about”的行。可能有一个简单的内部连接我可以使用,但我的SQ
posts
和pages
。posts
表的列数比pages
表的列数多,但除此之外,它们在模式方面是相同的
如果给出了slug
,则pages
表或posts
表中可能存在带有右侧slug
的行。我在想类似的事情
SELECT *
FROM pages
WHERE slug = 'about'
UNION
SELECT *
FROM posts
WHERE slug = 'about'
但这要求两个表中都有slug
为“about”的行。可能有一个简单的内部连接
我可以使用,但我的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
`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
以及页面
结构:
`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
`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,但需要指定列(col1、col2、…)这两个列表应该相同:
SELECT col1,col2,..
FROM pages
WHERE slug = 'about'
UNION
SELECT col1,col2,..
FROM posts
WHERE slug = 'about'
如果要像搜索一个表一样搜索这两个表,那么确实需要使用UNION(而不是JOIN)
上面的查询可能会失败,因为表具有不同的列。您应该在这两个子查询中指定列名。我认为您在这里使用的
UNION
是正确的……我一定是遗漏了something@lc. UNION
仅在每个表返回的列数相同且数据类型相同时才起作用。根据上面的描述,SELECT*
将不适用于UNION
,因为一个表的列数大于另一个表的列数,除非它们限制返回的列数。请公布这两个表的结构,如果有任何示例数据。@bluefeet True,这可能正是OP缺少的。我只是在考虑使用联合vs联合。