大家下午好!你可以帮帮我吗? :)
数据库样本:
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
已分配给Catalog Code
。除VARCHAR
外,所有字段均为ID
。可能是空的。
我想做什么:
选择Catalog Code = 6083
并获取所有其他Catalog Codes
IF Supplier Codes
中的一个是相同的。
所以我应该得到:Catalog Code = 6210
(最后一行),因为它与Supplier Code
(第一行)具有相同的6083
。
我的不良尝试:
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
,PRIMARY KEY
,第二个数据库FOREIGN KEY
?
答案 0 :(得分:0)
我会更像这样编写查询:
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, supplier_code)
上的索引。
答案 1 :(得分:0)
对于这个特殊的问题,你如何使用2表。
1)包含目录代码详细信息。(将目录代码保留为主键)
2)供应商详细信息(将ID保留为主键-1,2,3)
3)目录代码和供应商代码ID映射(两个表中的外键)..都是整数值,因此比较会使查询更快。