Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL从两个表中选择行,即使只有一个表可能有该行_Mysql_Sql_Inner Join - Fatal编程技术网

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联合。