内部加入问题

时间:2009-05-04 05:36:50

标签: mysql join

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。

4 个答案:

答案 0 :(得分:1)

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

像上面提到的那样给出你的查询的外键将成为

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

假设ccname是ccolor的名称。

答案 1 :(得分:0)

SELECT college.CColor FROM college
    INNER JOIN mats ON college.CColor = mats.CColor 
    AND mats.CColor = 'your query'

答案 2 :(得分:0)

如果我理解正确的话,你有大学名称,你想找出颜色名称。

链接属性是CColor。

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

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

答案 3 :(得分:0)

数据库提示:使用外键约束,否则您将遇到数据损坏问题,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