合并两个不带子句的选择语句

时间:2019-07-25 12:55:42

标签: mysql sql

我有两个根本不相关的表

第一个表称为pocetna_baner,该表存储3张将在索引页上显示的图片。

  

pocetna_baner

pocetna_baner

第二个表用于博客,我想获取由datum desc排序的3个博客的信息

  

博客表   blog

我尝试使用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  )

结果是这个

enter image description here 我的预期输出只是采用{detume desc limit 3排序的b.blog_id, b.naslov, b.tekst1, b.kategorija FROM blog b并从第二张表中添加ime_slike的列

2 个答案:

答案 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