【问题标题】:Inner Join Question内连接问题
【发布时间】:2009-05-04 05:36:49
【问题描述】:
CREATE TABLE college 
(  
  id       SERIAL PRIMARY KEY, 
  SCHOOL   VARCHAR(100),
  CColor   VARCHAR(100),  
  CCmascot VARCHAR(100)  
);

CREATE TABLE mats 
(  
  id                SERIAL PRIMARY KEY,  
  CColor            VARCHAR(100),  
  CCNAME            VARCHAR(100)  
);

MYSQL 好的,这是我认为很简单的问题,但我没有做对。我通过 URL 将 SCHOOL 名称传递给我,我现在使用 $_GET 来获取学院名称,我需要查询:
通过使用 SCHOOL 名称,我需要获取 CCOLOR 和 CCNAME。

【问题讨论】:

  • CCNAME 和 CColor 一样吗?

标签: mysql join


【解决方案1】:

您的问题不清楚,因此只能近似回答。 您需要两个表中可用于连接它们的列,即具有可用于识别父表(学院)中的记录何时与子表(垫子)中的记录匹配的列.理想情况下,您应该在子表映射中有一个外键,可以命名为college_id(这使用引用父表的命名约定)。

像上面提到的那样提供一个外键,你的查询会变成

select
  college.ccolor
from
  college inner join mats
    on college.id = mats.college_id
where
  mats.ccname = "<<COLOUR_DESIRED>>";

假设 ccname 是 ccolor 的名称。

【讨论】:

    【解决方案2】:

    如果我理解正确,您有大学名称,并且希望找出颜色名称。

    链接属性是CColor。

    您的查询应该看起来像这样:

    select
        m.ccname, m.ccolor
    from
        mats m
    inner join
        college c
    on
        c.ccolor = m.ccolor
    where
        c.school = @myVariable
    

    【讨论】:

      【解决方案3】:

      每日数据库提示:使用外键约束,否则您将遇到数据损坏问题,并且 SO 上的人将不知道您的列是如何相互关联的。

      当您了解关系建模的原因和用途后,您可能会发现有必要不使用它们(尽管除非您有充分的理由,否则不建议这样做),但现在,使用它们来明确定义表的方式相互关联。

      否则你的问题有点像问厨师,“我有一些没有标签的食物罐子,我认为是牛至。我如何为两人做一顿浪漫的晚餐?” (嗯..罐子里有什么??)

      外键记录:http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-foreign-keys.html

      加入文档:http://dev.mysql.com/doc/refman/5.1/en/join.html

      【讨论】:

        【解决方案4】:
        SELECT college.CColor FROM college
            INNER JOIN mats ON college.CColor = mats.CColor 
            AND mats.CColor = 'your query'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-25
          • 2017-10-06
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          相关资源
          最近更新 更多