【问题标题】:Read specific values from two tables with single result - mysql从具有单个结果的两个表中读取特定值 - mysql
【发布时间】:2013-05-23 06:56:50
【问题描述】:

我有两张表,分别是 Listings 和 Catalog_Options

列表

listing_id
catalog_option_1
catalog_option_2
catalog_option_3

目录选项

id
value

这里catalog_option_1, catalog_option_2, catalog_option_3 包含映射到Catalog_Options 表id 的id。我想读取所有 3 个的值并将其显示在一行中,以便 Listing_id 说 list_1

【问题讨论】:

  • 你真的应该改进你的表的设计......将 id 存储在字符串中是不好的做法
  • 不是字符串而是数字
  • string catalog_option_1 => 1 id from Catalog_Options 表就是你所说的

标签: mysql join union


【解决方案1】:

试试这个

 SELECT * FROM `catalog_options` 
 where id in
 (SELECT catalog_option_1 FROM `listings` 
 union
 SELECT catalog_option_2 FROM `listings`
 union
 SELECT catalog_option_3 FROM `listings`)

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT l.listing_id,c1.value as ca1,c2.value as ca2,c3.value as ca3 FROM listing l
       JOIN catalog_option c1 on c1.id = l.catalog_option_1
       JOIN catalog_option c2 on c2.id = l.catalog_option_2
       JOIN catalog_option c3 on c3.id = l.catalog_option_3;
    

    【讨论】:

    • 您的查询给出了错误的答案 Listing_id ca1 ca2 ca3 1 20 25 50 2 60 110 75 我不知道原因,但它是
    • 请解释其中有什么问题,因为我在 sqlfiddle 中尝试过,它给了我正确的答案..
    • 检查下面提供的我的解决方案,这就是我认为需要的
    • @DharmeshPatel 您的查询仅返回所有选项都可用的记录,即catalog_options_1、2、3。我想要所有记录,无论选项 1、2、3 或无可用,并希望使用列表 ID 缩小搜索范围。
    【解决方案3】:

    如果我理解正确,你需要试试这个:

    SELECT
        GROUP_CONCAT(l.listing_id),
        GROUP_CONCAT(c.value)
    FROM
        Listings l
    LEFT JOIN Catalog_Options c
        ON c.id = RIGHT(l.listing_id,1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2017-07-05
      • 1970-01-01
      • 2021-03-07
      • 2012-07-12
      相关资源
      最近更新 更多