【问题标题】:join and select operation on two tables两个表的join和select操作
【发布时间】:2013-01-29 02:46:15
【问题描述】:

我有两张类似的桌子

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 上从未学习过基础知识

【问题讨论】:

  • 两张表是什么关系?
  • column 'id' 是两者的主键
  • 我的意思是它们之间的关系如何?
  • 如果您的表中的数据是独立的,并且只有有时可以交叉 - 我建议使用链接表..(存储两个表之间的关系)

标签: mysql sql normalization foreign-key-relationship


【解决方案1】:

您可以尝试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'

【讨论】:

  • -1。因为 OP 询问“执行此操作的最佳方法是什么”,所以这不是最佳方法。
【解决方案2】:

您到底想用 Table2 做什么?也许更好的方法如下:

Table1 
   id
   price
   vendor

Table2
   Table1Id
   Sku

这样您就可以存储 1-N 个与 Table1 关联的 SKU。如果您只想要 2 个潜在的 SKU,那么您可以在 Table2 中添加一个 SkuType 字段 - 1 用于主要,2 用于备用,但这可能对您的需求来说太深了...

查询:

SELECT T.*
FROM Table1 T
   JOIN Table2 T2 ON T.Id = T2.Table1Id
WHERE T2.Sku = 'SomeSku'

【讨论】:

    【解决方案3】:

    我觉得你的表结构应该是这样的:

    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
    

    【讨论】:

      【解决方案4】:

      基本上,表关系的手指规则如下:

      如果关系是one-to-many,那么您应该将many 表中的PK 保存为one 表中的附加列。

      如果关系是many-to-many,您应该创建第三个表(连接表)。此表将包含两个表中的两个 PK(对于每个 tbl1 PK,您将拥有所有 tbl2 PK,反之亦然)。

      这样可以防止重复记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        相关资源
        最近更新 更多