MySQL JOIN / UNION从两个具有不同列数的表中选择所有行

时间:2016-02-05 12:42:15

标签: mysql sql join mysqli union

我正在尝试加入或联合两个结构不同的表的结果,按照它们的公共pubdate列排序,但收到错误消息:

"使用的SELECT语句具有不同数量的列"

$sql = "
SELECT * FROM news WHERE published='1' AND image!='' AND featured='1'
JOIN
SELECT * FROM videos WHERE published='1'
ORDER BY pubdate DESC
";
$query = mysqli_query($connection, $sql);
while($row = mysqli_fetch_array($query)){
$posttype = $row["posttype"];
$pubdate = $row["pubdate"];
if ($posttype == 'news'){
$content = $row["content"];
$image = $row["image"];
} // end if posttype
if ($posttype == 'videos'){
$description = $row["description"];
} // end if posttype
...
echo ....
} // end while

如何编辑我的查询以便我可以运行我的fetch数组并在之后检索相应的行(然后在两个表共享的另一个公共行上决定要提取的行?)

2 个答案:

答案 0 :(得分:0)

由于您未提供样本数据,我们无法建议您正确使用的方式和方式,但我注意到:

使用JOIN语法不正确。应该像:

SELECT *
FROM tbl1 t1
INNER JOIN tbl2 t2 ON t1.Id = t2.Id

如果要使用UNION - 列的顺序和列数应在两个表中匹配,因此您必须在以下两个表中提供列名:

SELECT Col1, Col2, Coln
FROM tbl1

UNION

SELECT Col1, Col2, Coln
FROM tbl2

答案 1 :(得分:0)

通过在选择列表中添加缺少的列,您可以UNION ALL具有不同列数的表。我的意思是,假设你有:

SQL> create table one ( c1 integer , c2 integer, c3 integer ) ;
SQL> create table two ( c1 integer , c2 integer ) ;

以下UNION ALL无效:

SQL> select * from one union all select * from two ;
[mysqld-5.5.27]The used SELECT statements have a different number of columns

但是这个还可以:

SQL> select * from one union all select *, null from two ;

注意我们为表two上的缺失(c3)列添加了NULL。你可以添加你想要的任何东西......