2014-10-29 41 views
0

我正在跨越一个有趣的问题,我不太确定如何处理它相关信息 - 因此,在这里我们去。表A:列表和表B:产品。列表和产品是两个完全不同列的独立表格,并附带自己的连接以将相关信息提供给他们。SQL - 订购/限制来自不同的表

相似的是,两个表有一个价格列,但保持在不同的列名信息。 我想要做的是从两个表格的组合数据集中拉回n个最便宜的价格。

鉴于两个不同表的连接最终会非常不同,所以我开始编写两个不同的SELECT语句。然后,我为每个表格订购价格ASC,合并两个查询的结果,并再次按价格对结果数组进行排序。

当然这里的固有缺陷是,从每个SELECT语句的数据集是独一无二的自己的数据池。简而言之,每个SELECT的价格等级只会对特定数据集成立,但与两个表格的总体结果相比并非如此。当您向数据集发出多个请求以获取分页行时,此问题会被放大。

考虑使用两个单独的查询的限制,我认为唯一的解决办法是编写查询作为一个选择,这样的数据集仍然是相同的,无论使用LIMIT或查询数据库获取更多的数据。我难倒就如何编写从两个完全不同的表收集数据(所有,而许多其他表加入每个表),并在相同的SELECT语句跨他们一列比较单一查询。

理想的情况下会发生什么,会是以下几点:

表A:房源

  • ROW 1 - 清单1 - $ 50
  • ROW 2 - 清单2 - $ 20
  • ROW 3 - 上市3 - $ 40

表B - 产品

  • ROW 1 - 第1种 - $ 100
  • ROW 2 - 物品2 - $ 300
  • ROW 3 - 第3项 - $ 55
  • ROW 4 - 第4项 - $ 1000个

第一次调用两个最便宜的价格只会从表A 01拉回行2和第3行。

下一次调用拉回接下来的两个最便宜的价格将从表B第1行从表A和第3行。

下一个电话将拉表B第2行和第1行

最后,最后一次通话就从表B第4行,并告知用户,有没有更多的结果被拉到两个表之间回来。

让我知道这是否需要更多的澄清!

回答

1

您似乎在寻找UNION运营商。你可能最终会写这样的查询:

SELECT 
    name, 
    price 
FROM (
    SELECT 
    listings.name AS name, 
    listings.price AS price 
    FROM 
    listings 
    [JOIN ...] 
    [WHERE ...] 
    ORDER BY 
    price 
    LIMIT 2 

    UNION ALL 

    SELECT 
    products.name AS name, 
    products.price AS price 
    FROM 
    products 
    [JOIN ...] 
    [WHERE ...] 
    ORDER BY 
    price 
    LIMIT 2 
) 
ORDER BY price 
LIMIT 2 
+0

谢谢约翰!刚刚开始验证这一点。这正是我所需要的 - 对于其他运行此表的人,我对代码进行了编辑,以将每个表设置为别名。否则你会得到一个SQL错误。希望这最终能帮助别人顺利下线:) – aamirl 2014-10-31 05:10:41