我有两张桌子,比如
table1
=======
id primary
sku
price
vendor
table2
=====
id primary
sku
alt_sku
基本上,我的搜索词是sku或alt_sku,基于它,我想从table1中选择数据
这样做的最佳方法是什么?我应该创建第三个表来存储table1.sku和table2.sku /table2.alt_sku之间的关系吗?或者我如何从table1获取数据
抱歉,如果这个问题非常愚蠢......我正在尝试学习mysql,因此,我在WP上并且从未参加过基础知识答案 0 :(得分:0)
你究竟想用Table2做什么?也许更好的方法如下:
Table1
id
price
vendor
Table2
Table1Id
Sku
这样,您可以存储与Table1关联的1-N个SKU。如果你只想要2个潜在的SKU,那么你可以在你的Table2中添加一个SkuType字段 - 1代表Primary,2代替Alternate,但这可能会让你的需求太深......
并查询:
SELECT T.*
FROM Table1 T
JOIN Table2 T2 ON T.Id = T2.Table1Id
WHERE T2.Sku = 'SomeSku'
答案 1 :(得分:0)
我认为你的表结构应该是这样的:
table1
=======
id primary
IdFromtable2
price
vendor
table2
=====
id primary
sku
alt_sku
您的选择查询将如下:
SELECT t1.*
FROM table1 t1
INNER JOIN table2 t2 ON t1.IdFromtable2 = t2.Id
WHERE t2.sku = @sku AND
t2.alt_sku = @alt_sku
答案 2 :(得分:0)
基本上,表关系的指法规则如下:
如果关系是one-to-many
,那么您应该将many
表中的PK保存为one
表中的附加列。
如果关系为many-to-many
,则应创建第三个表(连接表)。这个表将同时具有来自两个表的PK(对于每个tbl1 PK,你将拥有所有tbl2 PK,反之亦然)。
这样可以防止重复记录。
答案 3 :(得分:0)
您可以尝试inner join。假设TERM
是您正在搜索的sku。
SELECT
t1.*
FROM
table1 t1
inner join table2 t2 on (t1.sku = t2.sku)
WHERE
t1.sku = 'TERM'
or t2.alt_sku = 'TERM'