Mysql SQL选择具有相同列值的行

Mysql SQL选择具有相同列值的行,mysql,sql,database-design,Mysql,Sql,Database Design,大家下午好!你能帮我吗 数据库示例: 上述ID已分配给目录代码。除ID外,所有字段均为VARCHAR。可以为空 我想做的是: 选择例如Catalog Code=6083,如果其中一个供应商代码相同,则获取所有其他目录代码 所以我应该得到:catalogcode=6210最后一行,因为它与6083第一行的供应商代码相同 我拙劣的尝试: 需要改进设计 我的真实数据库有超过100000行。我觉得DB的设计需要改进,但哪些需要改进 索引、主键、带外键的第二个DB?我将更像这样编写查询: select t

大家下午好!你能帮我吗

数据库示例:

上述ID已分配给目录代码。除ID外,所有字段均为VARCHAR。可以为空

我想做的是:

选择例如Catalog Code=6083,如果其中一个供应商代码相同,则获取所有其他目录代码

所以我应该得到:catalogcode=6210最后一行,因为它与6083第一行的供应商代码相同

我拙劣的尝试:

需要改进设计

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


索引、主键、带外键的第二个DB?

我将更像这样编写查询:

select t.*
from t
where t.supplier_code in (select t2.supplier_code
                          from t t2
                          where t2.catalog_code = '6083'
                         );
你的代码很奇怪。你为什么不进来?这是多余的。然后在第二步中,您需要一个列表,而不是列值。事实上,只要=就足够了


对于性能,您需要一个关于tcatalog_代码、供应商代码的索引。

对于这个特定问题,您如何使用表2

1包含目录代码详细信息。请将目录代码保留为主键

2供应商详细信息将ID作为主键-1,2,3


3目录代码和供应商代码ID映射两个表中的外键。。两者都是整数值,因此由于比较,查询速度会快一些。

不在,因为某些列值是空字符串或0,或者我想排除某些内容-也许有更好的方法可以做到这一点。我记得我们有连接时。那是过去的日子。我知道应该使用JOIN——我就是不能把我的头脑集中在这个特定的问题上。你能帮我们吗主键必须是唯一的,目录代码不是唯一的。这同样适用于此数据库中的ID。但我可以添加新的列PK_ID,但我不能用它在我的头脑中走得更远-下一步是什么?这就是我寻求帮助的原因:把你的桌子分成3张桌子。其中第1个将只有目录代码、描述、类型和。。。第二个表将有ID整数、供应商、供应商代码和…第三个表将有目录代码和供应商ID。为了说明我正在学习:第三个表将供应商代码ID作为外键,参考第二个表中的供应商代码?供应商代码ID作为第二个表中ID的外键。因为ID是第二个表中的主键。0何时出现在哪些列中,a何时出现在哪些列中?id是否总是以相同的代码显示?代码是否总是以相同的id显示?你的问题不清楚。当您指的是table时,您似乎也使用了db。
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`
                )
        )
select t.*
from t
where t.supplier_code in (select t2.supplier_code
                          from t t2
                          where t2.catalog_code = '6083'
                         );