Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询返回包含详细/重复信息的数据_Mysql - Fatal编程技术网

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

我正在处理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");
现在我想知道如何选择/连接数据以获得类似的结果:


您只需连接两个表:

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
    。)
  • 我使两个
    id
    字段自动递增。这意味着insert语句现在可以
    插入到自己的(own_name,own_color)值(“Me”,“Red”)
    和数据库将自动为您跟踪ID
  • 我添加了主键,以便数据库知道可以通过
    id
    字段来识别行
  • 我添加了一个外键约束,这意味着
    pet
    中的每个
    own\u id
    必须存在于
    own
    中。如果您试图插入或更改
    pet
    行以打破此约束,mysql将向您抛出一个错误

这是一个基本的
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)
);