首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite3:如何选择仅在第一个表中显示的行(与其他表联接)

sqlite3:如何选择仅在第一个表中显示的行(与其他表联接)
EN

Stack Overflow用户
提问于 2017-11-13 10:08:19
回答 1查看 55关注 0票数 1

我有这样的结构:

mainTable

代码语言:javascript
复制
article | brand      | price
ocm10   | someBrand1 | 100
ocm20   | someBrand1 | 200
ocm30   | someBrand2 | 300

secondTable

代码语言:javascript
复制
article | brand      | price
ocm30   | someBrand1 | 320
ocm10   | someBrand1 | 120

thirdTable

代码语言:javascript
复制
article | brand      | price
ocm20   | someBrand1 | 230
ocm40   | someBrand1 | 430
ocm50   | someBrand3 | 530

现在我有这样的疑问:

代码语言:javascript
复制
SELECT article,
       mainTable.brand AS priceBrand,
       mainTable.price AS priceTableMain,
       secondTable.price AS priceTableSecond,
       thirdTable.price AS priceTableThird,
       min(ifnull(mainTable.price, 'inf'),
           ifnull(secondTable.price, 'inf'),
           ifnull(thirdTable.price, 'inf')) AS minPrice
FROM (SELECT article FROM mainTable
      UNION
      SELECT article FROM secondTable
      UNION
      SELECT article FROM thirdTable)
LEFT JOIN mainTable USING (article)
LEFT JOIN secondTable USING (article)
LEFT JOIN thirdTable USING (article);

因此,我想看到:

代码语言:javascript
复制
article | brand      | priceMainTable | priceSecond | priceThird | minPrice
ocm10   | someBrand1 | 100            |   null      | null       | 100
ocm20   | someBrand1 | 200            |   null      | 230        | 200
ocm30   | someBrand2 | 300            |   320       | null       | 300

(因此,没有像ocm40这样的行,没有在第一个表中显示的ocm50 )

如何才能只获得行(在mainTable中表示)

因此,我将只有一行文章:ocm10, ocm20, ocm30与联合数据的价格?

这是小提琴:http://sqlfiddle.com/#!7/87df2/4/0

顺便说一句:我知道,同样的结构不是个好主意.在实际的应用程序表中是不同的,这只是一个示例。我可以有3张以上的表格:即使10张有连接等等.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-13 10:21:24

您应该能够将第一个表左转到其他两个表:

代码语言:javascript
复制
SELECT
    t1.article,
    t1.brand,
    t1.price AS priceMainTable,
    t2.price AS priceSecond,
    t3.price AS priceThird,
    MIN(t1.price,
        COALESCE(t2.price, t1.price),
        COALESCE(t3.price, t1.price)) AS minPrice
FROM mainTable t1
LEFT JOIN secondTable t2
    ON t1.article = t2.article
LEFT JOIN thirdTable t3
    ON t1.article = t3.article;

请注意,我们使用了MIN的标量版本,它接受多个参数。COALESCE的逻辑是,第二个和第三个价格“推迟”到第一个价格,要么是NULL。因此,例如,如果第二个和第三个价格都是NULL,那么最低价格将由第一个价格决定,第一个价格是唯一可靠的可用信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47261754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档