在两个表上连接并选择操作

时间:2013-02-13 14:14:28

标签: mysql sql normalization foreign-key-relationship

我有两张桌子,比如

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上并且从未参加过基础知识

4 个答案:

答案 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'