合并来自Mysql中两个表的无关列

时间:2018-11-09 00:14:42

标签: mysql

我只想比较SELECT查询的两个结果。因此,如何在没有任何相关性的情况下合并来自两个表的列(没有什么相同,因此不能使用JOIN..ON ..查询)。 这是我的查询代码:

SELECT QueryName,Recommendation,Price
FROM PaidGame
WHERE PriceFinal != '0';

SELECT QueryName,Recommendation,Price
FROM FreeGame
WHERE PriceFinal = '0';

我的问题是,我是否有任何可能的方式将这些列组合到一个输出中。 这是我的输出,我想将这6列放在一起,以进行比较。 enter image description here

enter image description here

这就是我的期望,我只想让它们一起显示。 enter image description here

3 个答案:

答案 0 :(得分:0)

您可以进行并集或全部合并以将两个选择组合在一起,或者比较3列的校验和以查看它们是否相等

答案 1 :(得分:0)

SELECT QueryName,Recommendation,Price FROM PaidGame WHERE PriceFinal != '0'
UNION ALL
SELECT QueryName,Recommendation,Price FROM FreeGame WHERE PriceFinal = '0';

这就是您所追求的。关键字ALL可能不是必需的。

更多示例:https://www.w3schools.com/sql/sql_union.asp

已更新

SELECT P.QueryName, P.Recommendation, P.Price, F.QueryName, F.Recommendation, F.Price
FROM PaidGame P, FreeGame F

SELECT P.QueryName, P.Recommendation, P.Price, F.QueryName, F.Recommendation, F.Price
FROM PaidGame P 
JOIN FreeGame F

答案 2 :(得分:0)

除了可以在表示层(例如XSL,报表等)中更好地完成此操作之外,您还可以这样做。

我的解决方案是创建一个索引表,然后加入到每个表查询中,并添加一个行标识符。这样的事情(希望可以翻译成Mysql-我更像是TSQL的人):

create table #index (indexnum int)

declare @minnum as int set @minnum=1 while @minnum<1000 BEGIN

insert into #index select @minnum set @minnum=@minnum+1 END


create table #paidgame  (queryname varchar(100), recommendation varchar(100), price varchar (100))

create table #freegame  (queryname varchar(100), recommendation varchar(100), price varchar (100))

insert into #paidgame select 'Game 1', 'Good', '£4.99' UNION ALL select 'Game 2', 'Good', '£3.99' UNION ALL select 'Game 3', 'Good', '£5.99' 

insert into #freegame select 'Game 4', 'Good', '£0.00' UNION ALL select 'Game 5', 'Good', '£0.00' UNION ALL select 'Game 6', 'Good', '£0.00' 


select * from

#index i left join (select * from (

SELECT QueryName,Recommendation,Price, dense_rank() OVER (ORDER BY queryname) as prank FROM #PaidGame pg ) aa ) t1 on t1.prank=i.indexnumn

left join 

(select * from (SELECT QueryName,Recommendation,Price, dense_rank() OVER (ORDER BY queryname) as frank  FROM #FreeGame fg ) bb) t2 on i.indexnumn=t2.frank

where t1.queryname is not null and t2.queryname is not null