MySQL查询返回包含详细/重复信息的数据
我正在处理MySQL数据库,我需要用过程选择一些数据。所以我有点像:MySQL查询返回包含详细/重复信息的数据,mysql,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
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");
现在我想知道如何选择/连接数据以获得类似的结果:
您只需连接两个表:
Select own_name,own_color, name from own join pet on
pet.own_id = own.id
这是一个联接。虽然联接是一个有效的答案,但有些人发现子查询更易于阅读和编写:
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)
);
我还添加了一些其他内容
改进/变化:
- 我假设所有字段都不应该为空。我将NOTNULL添加到所有字段中,使得字段的值不可能为NULL。(如果希望允许某些字段的值为
,只需从NULL
语句中删除CREATE TABLE
。)notnull
- 我使两个
字段自动递增。这意味着insert语句现在可以id
和数据库将自动为您跟踪ID插入到自己的(own_name,own_color)值(“Me”,“Red”)
- 我添加了主键,以便数据库知道可以通过
字段来识别行id
- 我添加了一个外键约束,这意味着
中的每个pet
必须存在于own\u id
中。如果您试图插入或更改own
行以打破此约束,mysql将向您抛出一个错误pet
join
查询。如果你要使用这种语言,你应该学习基本的SQL。我假设own
意味着owner?Gordon是正确的,它是一个简单的连接。不管怎样,我已经在下面回答了。但从字面上看,任何在线SQL教程都会在第一节或第二节中介绍这一点。我已经用语句构建了查询,很少使用联接,我想知道如何从其他表联接数据。不知道为什么我忘了连接到底是如何工作的。无论如何,我必须回顾一下SQL中的一些基本信息,特别是那些引用连接的信息。
SELECT own_name, own_color, (SELECT name
FROM pet
WHERE pet.own_id = own.id) AS name
FROM own
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)
);