我正在研究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
答案 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
语句中删除CREATE TABLE
。)id
个字段。这意味着insert语句现在只能是insert into own (own_name, own_color) values ("Me", "Red");
,数据库将自动跟踪你的ID。id
字段own_id
中的每个pet
都必须存在于own
中。如果您尝试以破坏此约束的方式插入或更改pet
行,则mysql将向您抛出错误。