MySQL查询返回带有详细/重复信息的数据

时间:2014-07-02 13:14:55

标签: mysql

我正在研究MySQL数据库,我需要用程序选择一些数据。所以我有类似的东西:

CREATE TABLE pet (id INT, name VARCHAR(20), own_id INT);
insert into pet values (1,"Rufus", 1);
insert into pet values (2,"Bali", 1);
insert into pet values (3,"Lolo", 2);

ref pet.own_id = own.id 

CREATE TABLE own (id INT, own_name VARCHAR(20), own_color VARCHAR(20));
insert into own values (1,"Me", "Red");
insert into own values (2,"Other" ,"Green");

现在我想知道如何选择/加入数据以获得类似的结果(作为结果):

own_name    own_color   name
Me          Red         Rufus
Me          Red         Bali
Other   Green           Lolo    

4 个答案:

答案 0 :(得分:2)

SELECT own_name, own_color, name
from pet
JOIN own on (pet.own_id = own.id)
;

答案 1 :(得分:0)

您只需加入两个表:

Select own_name,own_color, name from own join pet on 
pet.own_id = own.id 

答案 2 :(得分:0)

select o.own_name, o.own_color, p.name from own o, pet p
where p.own_id=o.id

这是一个加入。

答案 3 :(得分:0)

虽然JOIN是一个有效的答案,但有些人发现子查询更容易读写:

SELECT own_name, own_color, (SELECT name 
                             FROM pet 
                             WHERE pet.own_id = own.id) AS name
FROM own

这与JOIN方法基本相同,但后来作为子查询

我对你的表有一个建议:own_id是一个外键,所以不是

CREATE TABLE pet (id INT, name VARCHAR(20), own_id INT);
CREATE TABLE own (id INT, own_name VARCHAR(20), own_color VARCHAR(20));

我做:

CREATE TABLE own (
    id INT NOT NULL AUTO_INCREMENT,
    own_name VARCHAR(20) NOT NULL,
    own_color VARCHAR(20) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE pet (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    own_id INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (own_id) REFERENCES own (id)
);

我还添加了其他一些东西。

改进/更改:

  • 我假设没有字段应为NULL。我在所有字段中添加了NOT NULL,使得字段无法具有NULL值。 (如果您希望某些字段的值为NULL,只需从NOT NULL语句中删除CREATE TABLE。)
  • 我自动增加了id个字段。这意味着insert语句现在只能是insert into own (own_name, own_color) values ("Me", "Red");,数据库将自动跟踪你的ID。
  • 我添加了主键,因此数据库知道id字段
  • 可以识别行
  • 我添加了一个外键约束,这意味着own_id中的每个pet都必须存在于own中。如果您尝试以破坏此约束的方式插入或更改pet行,则mysql将向您抛出错误。
相关问题