我有两个根本不相关的表
第一个表称为pocetna_baner,该表存储3张将在索引页上显示的图片。
pocetna_baner 表
第二个表用于博客,我想获取由datum desc排序的3个博客的信息
我尝试使用UNION,UNION ALL,不带子句的JOIN,完全外部联接,但由于无法实现没有 on 子句
的情况而无法使用union all with queries that have a different number of columns->我搜索了答案,找到了这个看起来不错,但不幸的是无法正常工作
这就是我现在拥有的
(SELECT null as blog_id, null as naslov, null as tekst1, null as kategorija, p.ime_slike FROM
pocetna_baner p )
UNION ALL
(SELECT b.blog_id, b.naslov, b.tekst1, b.kategorija ,null as ime_slike
FROM blog b ORDER BY b.datum DESC LIMIT 3 )
结果是这个
我的预期输出只是采用{detume desc limit 3排序的b.blog_id, b.naslov, b.tekst1, b.kategorija FROM blog b
并从第二张表中添加ime_slike
的列
答案 0 :(得分:2)
您可以通过在每个表中创建1个计数器列并对其进行匹配来构造ON子句:
select
b.blog_id, b.naslov, b.tekst1, b.kategorija, p.ime_slike
from (
select
blog_id, naslov, tekst1, kategorija,
(@row_number1:=@row_number1 + 1) num
from blog, (select @row_number1:=0) t
order by datum desc limit 3
) b left join (
select ime_slike,
(@row_number2:=@row_number2 + 1) num
from pocetna_baner, (select @row_number2:=0) t
order by id limit 3
) p on p.num = b.num
如果您确定表id
中的pocetna_baner
的值分别为1、2和3,则可以简化为:
select
b.blog_id, b.naslov, b.tekst1, b.kategorija, p.ime_slike
from (
select
blog_id, naslov, tekst1, kategorija,
(@row_number1:=@row_number1 + 1) num
from blog, (select @row_number1:=0) t
order by datum desc limit 3
) b left join pocetna_baner p
on p.id = b.num
答案 1 :(得分:0)
我刚刚通过代码给出了一个例子。 请根据需要进行更改。
SELECT * FROM (
SELECT p.ime_slike,null as blog_id,null as naslov,null as kategorija FROM
pocetna_baner p
UNION ALL
SELECT b.blog_id, b.naslov, b.tekst1, b.kategorija ,null as ime_slike
FROM blog b
ORDER BY datum DESC LIMIT 3 ) AS k