mysql - SQL选择具有相同列值的行

标签 mysql sql database-design

大家下午好!你可以帮帮我吗? :)

数据库示例:

ID  Catalog Code  Description Type  Supplier  Supplier Code

1   6083          TV LG 32    tv    lg        ud28f1137ka-ga-i2-tr  
1   6083          TV LG 32    tv    samsung   asfb1145-ssd          # select it
2   6129          Phone 5X    phone apple     mics_rp
2   6129          Phone 5X    phone htc       nco_p13 961-x
2   6129          Phone 5X    phone nokia     n_41s
3   6210          Friezer     agd   samsung   asfb1145-ssd          # found match
                                                                  it has the same
                                                                  `Supplier Code`

上面的ID被分配给目录代码。除了 ID 之外,所有字段都是 VARCHAR。可能为空。

我想做什么:

选择例如目录代码= 6083并获取所有其他目录代码 IF其中一个供应商代码是一样。

所以我应该得到:Catalog Code = 6210(最后一行),因为它的Supplier Code6083(第一行)相同.

我糟糕的尝试:

SELECT a.*
  FROM `TABLE` a
  WHERE EXISTS
        (SELECT 1
            FROM `TABLE` b
            WHERE b.`Catalog Code` = '6083'
            AND (
                  a.`Supplier Code` NOT IN ('') 
              AND a.`Supplier Code` IN b.`Supplier Code`
                )
        )

需要改进设计

我的真实数据库有超过100 000 行。我觉得数据库设计需要改进,但哪些改进呢?

INDEXES主键,第二个数据库带有FOREIGN KEY

最佳答案

我会像这样编写查询:

select t.*
from t
where t.supplier_code in (select t2.supplier_code
                          from t t2
                          where t2.catalog_code = '6083'
                         );

你的代码很奇怪。为什么你会not in ('')?这是多余的。然后,在第二个 in 中,您需要一个列表,而不是列值。事实上,只需 = 就足够了。

为了提高性能,您需要在 t(catalog_code, seller_code) 上建立索引。

关于mysql - SQL选择具有相同列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268768/

相关文章:

php - 重复文章出现在网站上

sql - 我该如何处理这个泛化设计问题?

database-design - 我可以在 Oracle 数据库中持久化 redis 数据吗?

mysql - 无法在 Linux 服务器上通过 Toad 连接 mysql 数据库,而可以通过 putty 或 Linux 终端轻松连接?

mysql - 如果我有一个依赖表并且知道第三个表中的值,请从一个表​​中删除行

php - 一个 MySQL 查询中基于不同日期范围的平均值选择语句

mysql - 为什么 <> ALL 和 NOT IN 在 SQL 中互为别名?

mysql - 更新多行替换mysql中特定位置的字符

sql - 通过 VBA/ADO 通过 SQL 更新 SharePoint 列表中的记录?

mysql - MySQL数据库中存储多个范围的表设计