【问题标题】:Combine 2 or more tables in sql在sql中合并2个或多个表
【发布时间】:2017-02-09 01:54:13
【问题描述】:

产品表

products
productid | sellerid | productprice

同一个产品表

sameproduct
productid | sellerid | productprice

卖家表

sellers
sellerid | sellername | selleraddress

sellerid 是表 products 和 sameproduct 的外键。 我想显示特定产品 ID 的卖家详细信息,该产品 ID 可能同时出现在 products 和 sameproduct 表中。

【问题讨论】:

  • 首先,如果两个表的结构相同,那么你应该合并。如果你想组织不同类型或类别的产品,那么你可以添加一个类似类别或类型的字段,然后你可以根据它进行过滤.
  • @NaveedRamzan 不一定正确。 1:1 关系是关系模型中删除空值的常用方法。此外,它还可用于提高用于不同应用程序或不同角色的表的性能。如果大多数人只使用 4 列但有一个人需要使用 40 列,那么拆分表格将提高大多数人的应用程序性能。也是一种典型的数据库分割方法。

标签: mysql sql database


【解决方案1】:

这可能会对你有所帮助。

SELECT * 
FROM sellers 
     INNER JOIN sameproduct ON sellers.sellerid = sameproduct.sellerid  
     INNER JOIN products ON sellers.sellerid = products.sellerid

【讨论】:

    【解决方案2】:

    尝试类似:

    select sellers.* from products
    inner join sellers on products.sellerid =sellers.sellerid
    where productid=@productid
    UNION
    select sellers.* from sameproduct
    inner join sellers on sameproduct.sellerid =sellers.sellerid
    where productid=@productid
    

    【讨论】:

      【解决方案3】:

      你可以联合两个表,然后做一些事情:

      SELECT *
        FROM (
              SELECT * FROM products 
              UNION ALL SELECT * FROM sameproduct
             ) AS p
        JOIN sellers AS s ON (s.sellerid = p.sellerid)
       WHERE productid = @productid
      

      【讨论】:

        【解决方案4】:

        您可以通过JOINproductssellers 表格来获得所需的输出,例如:

        SELECT s.sellerid, s.sellername, s.selleraddress
        FROM sellers JOIN products p ON s.sellerid = p.sellerid
        WHERE p.productid = ?
        

        请注意,如果产品有多个卖家,它将返回多行。

        【讨论】:

          【解决方案5】:

          我猜这就是你需要的?您将 Sellers 表连接到两个表,并仅选择在两个产品表之一中找到 productid 的记录。

          declare @productid int
          set @productid = 1
          
          select s.*, p.productid, sp.productid
            from sellers s
              left join product p
                on s.sellerid = p.sellerid
              left join sameproduct sp
                on s.sellerid = sp.sellerid
            where p.productid = @productid 
                or sp.productid = @productid
          

          【讨论】:

          • AlbertoCh 和 Roman Tkachuk 的 UNION 解决方案应该也可以工作!
          【解决方案6】:

          您想显示产品的卖家,因此您需要从卖家表中进行选择(不加入)。您可以在 IN 子句(或 EXISTS 子句,如果您愿意的话)中获取产品的卖家 ID。

          select *
          from sellers
          where sellerid in (select sellerid from products where productid = 12345)
             or sellerid in (select sellerid from sameproduct where productid = 12345);
          

          select *
          from sellers
          where sellerid in (select sellerid from products where productid = 12345
                             union all 
                             select sellerid from sameproduct where productid = 12345);
          

          不过,最好将产品和相同产品放在一张桌子上。

          【讨论】:

            【解决方案7】:

            使用 MySQL 连接三个名为 productssameproductsellers 的表:

            select s.*
            from products p 
            inner join sameproduct ps on p.sellerid = ps.sellerid
            inner join sellers s on ps.sellerid = s.sellerid 
            where productid =in_product_id
            

            【讨论】:

            • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多