2017-08-29 92 views
0

我有一个mysql查询,我试图弄清楚。mysql从2个不同的表中选择并返回最高的价格

基本上我有表1的cols:地产代理,价格,位置,别墅,平房

,我有表2的cols:地产代理,价格,位置,复式,复式

正如你所看到的这些表格是非常不同的。

我需要一个查询来选择表1或表2中的所有列,具体取决于哪个列具有最高的价格。例如:

SELECT * FROM table1, table2 WHERE table1.price = table2.price ORDER BY price DESC LIMIT 1,1; 
+0

表1或表2或两者?你可以使用agGregate函数** Max ** –

+0

我应该使用ORDER BY a.priceInt,b.priceInt ....为什么在我的数据库中有1或11被追加到列名称。 – KDJ

+0

@menai我需要从表1或2中选择所有列,具体取决于哪一个具有最高的价格......没有合并它们 – KDJ

回答

0

如果表是如此的相似,你可以UNION它们,然后排序结果下降,并获得更高的价格。

(SELECT * FROM table1) 
UNION ALL 
(SELECT * FROM table2) 
ORDER BY price DESC 
LIMIT 1 

如果您想给它们别名,您需要明确指定列。


重新您的后续问题:

如果你有两个表之间不同的几列,并要保留它们,您需要从SELECT *和名称都列明确移开。

(SELECT estate agent, price, location, bungalow, cottage, NULL AS penthouse, NULL AS duplex 
FROM table1) 
UNION ALL 
(SELECT estate agent, price, location, NULL, NULL, penthouse, duplex 
FROM table2) 
ORDER BY price DESC 
LIMIT 1 

您不需要在第二个子查询中提供别名,因为列名始终由UNION的第一个查询确定。即使您在第二个查询中声明列别名,它们也会被忽略。

+0

工程就像一个魅力......我的示例代码(用于给出代码的缘故)返回了一行,将所有列。我需要的是UNION ALL – KDJ

+0

从前端角度来看,如果它的表1或表2中的任何一个,您如何检测山寨是否具有价值。为了简洁起见,它可以是0或1.如果它是一个单位将指定该列返回null? – KDJ

0

试试这个: SELECT * FROM( SELECT * FROM表1 UNION SELECT * FROM表2 ORDER BY价格降序)× LIMIT 1;