Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_Join - Fatal编程技术网

Mysql 左连接为新列?

Mysql 左连接为新列?,mysql,database,join,Mysql,Database,Join,我试图在一个表的同一列上进行多个左连接。我需要将“table2.words”与“table1.color”和“table2.words”与“table1.food”左连接。我该怎么做?我能把左边的“table2.words”变成一个新的列吗 我的SQL代码: SELECT table1.id, table1.color, table2.words FROM table1 LEFT JOIN table2 ON table1.color=table2.id LEFT JOIN table2 ON

我试图在一个表的同一列上进行多个左连接。我需要将“table2.words”与“table1.color”和“table2.words”与“table1.food”左连接。我该怎么做?我能把左边的“table2.words”变成一个新的列吗

我的SQL代码:

SELECT table1.id, table1.color, table2.words
FROM table1
LEFT JOIN table2 ON table1.color=table2.id
LEFT JOIN table2 ON table1.food=table2.id 
--------------------------------
| id     | color    | food     |
--------------------------------
| 1      | 1        | 3        |
| 2      | 1        | 4        |
| 3      | 1        | 3        |
| 4      | 1        | 4        |
| 5      | 2        | 3        |
| 6      | 2        | 4        |
| 7      | 2        | 3        |
| 8      | 2        | 4        |
--------------------------------
---------------------------
| id     | words          |
---------------------------
| 1      | yellow         |
| 2      | blue           |
| 3      | cookies        |
| 4      | milk           |
---------------------------
----------------------------------------
| id     | colorname    | foodname     |
----------------------------------------
| 1      | yellow       | cookies      |
| 2      | yellow       | milk         |
| 3      | yellow       | cookies      |
| 4      | yellow       | milk         |
| 5      | blue         | cookies      |
| 6      | blue         | milk         |
| 7      | blue         | cookies      |
| 8      | blue         | milk         |
----------------------------------------
表1:

SELECT table1.id, table1.color, table2.words
FROM table1
LEFT JOIN table2 ON table1.color=table2.id
LEFT JOIN table2 ON table1.food=table2.id 
--------------------------------
| id     | color    | food     |
--------------------------------
| 1      | 1        | 3        |
| 2      | 1        | 4        |
| 3      | 1        | 3        |
| 4      | 1        | 4        |
| 5      | 2        | 3        |
| 6      | 2        | 4        |
| 7      | 2        | 3        |
| 8      | 2        | 4        |
--------------------------------
---------------------------
| id     | words          |
---------------------------
| 1      | yellow         |
| 2      | blue           |
| 3      | cookies        |
| 4      | milk           |
---------------------------
----------------------------------------
| id     | colorname    | foodname     |
----------------------------------------
| 1      | yellow       | cookies      |
| 2      | yellow       | milk         |
| 3      | yellow       | cookies      |
| 4      | yellow       | milk         |
| 5      | blue         | cookies      |
| 6      | blue         | milk         |
| 7      | blue         | cookies      |
| 8      | blue         | milk         |
----------------------------------------
表2:

SELECT table1.id, table1.color, table2.words
FROM table1
LEFT JOIN table2 ON table1.color=table2.id
LEFT JOIN table2 ON table1.food=table2.id 
--------------------------------
| id     | color    | food     |
--------------------------------
| 1      | 1        | 3        |
| 2      | 1        | 4        |
| 3      | 1        | 3        |
| 4      | 1        | 4        |
| 5      | 2        | 3        |
| 6      | 2        | 4        |
| 7      | 2        | 3        |
| 8      | 2        | 4        |
--------------------------------
---------------------------
| id     | words          |
---------------------------
| 1      | yellow         |
| 2      | blue           |
| 3      | cookies        |
| 4      | milk           |
---------------------------
----------------------------------------
| id     | colorname    | foodname     |
----------------------------------------
| 1      | yellow       | cookies      |
| 2      | yellow       | milk         |
| 3      | yellow       | cookies      |
| 4      | yellow       | milk         |
| 5      | blue         | cookies      |
| 6      | blue         | milk         |
| 7      | blue         | cookies      |
| 8      | blue         | milk         |
----------------------------------------
我试图输出的内容:

SELECT table1.id, table1.color, table2.words
FROM table1
LEFT JOIN table2 ON table1.color=table2.id
LEFT JOIN table2 ON table1.food=table2.id 
--------------------------------
| id     | color    | food     |
--------------------------------
| 1      | 1        | 3        |
| 2      | 1        | 4        |
| 3      | 1        | 3        |
| 4      | 1        | 4        |
| 5      | 2        | 3        |
| 6      | 2        | 4        |
| 7      | 2        | 3        |
| 8      | 2        | 4        |
--------------------------------
---------------------------
| id     | words          |
---------------------------
| 1      | yellow         |
| 2      | blue           |
| 3      | cookies        |
| 4      | milk           |
---------------------------
----------------------------------------
| id     | colorname    | foodname     |
----------------------------------------
| 1      | yellow       | cookies      |
| 2      | yellow       | milk         |
| 3      | yellow       | cookies      |
| 4      | yellow       | milk         |
| 5      | blue         | cookies      |
| 6      | blue         | milk         |
| 7      | blue         | cookies      |
| 8      | blue         | milk         |
----------------------------------------
注意:我无法更改表格结构

SELECT
    table1.id,
    table2_A.words colorname,
    table2_B.words foodname
FROM table1 
LEFT JOIN table2 table2_A ON table1.color=table2_A.id 
LEFT JOIN table2 table2_B ON table1.food=table2_B.id;
您的示例数据

mysql> drop database if exists supercoolville;
Query OK, 2 rows affected (0.06 sec)

mysql> create database supercoolville;
Query OK, 1 row affected (0.00 sec)

mysql> use supercoolville;
Database changed
mysql> create table table1
    -> (
    ->     id int not null auto_increment,
    ->     color int,
    ->     food int,
    ->     primary key (id)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into table1 (color,food) values
    -> (1,3),(1,4),(1,3),(1,4),
    -> (2,3),(2,4),(2,3),(2,4);
Query OK, 8 rows affected (0.06 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> create table table2
    -> (
    ->     id int not null auto_increment,
    ->     words varchar(20),
    ->     primary key (id)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> insert into table2 (words) values
    -> ('yellow'),('blue'),('cookies'),('milk');
Query OK, 4 rows affected (0.07 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from table1;
+----+-------+------+
| id | color | food |
+----+-------+------+
|  1 |     1 |    3 |
|  2 |     1 |    4 |
|  3 |     1 |    3 |
|  4 |     1 |    4 |
|  5 |     2 |    3 |
|  6 |     2 |    4 |
|  7 |     2 |    3 |
|  8 |     2 |    4 |
+----+-------+------+
8 rows in set (0.01 sec)

mysql> select * from table2;
+----+---------+
| id | words   |
+----+---------+
|  1 | yellow  |
|  2 | blue    |
|  3 | cookies |
|  4 | milk    |
+----+---------+
4 rows in set (0.00 sec)
我的查询结果

mysql> SELECT
    ->     table1.id,
    ->     table2_A.words colorname,
    ->     table2_B.words foodname
    -> FROM table1
    ->     LEFT JOIN table2 table2_A ON table1.color=table2_A.id
    ->     LEFT JOIN table2 table2_B ON table1.food=table2_B.id
    -> ;
+----+-----------+----------+
| id | colorname | foodname |
+----+-----------+----------+
|  1 | yellow    | cookies  |
|  2 | yellow    | milk     |
|  3 | yellow    | cookies  |
|  4 | yellow    | milk     |
|  5 | blue      | cookies  |
|  6 | blue      | milk     |
|  7 | blue      | cookies  |
|  8 | blue      | milk     |
+----+-----------+----------+
8 rows in set (0.00 sec)

mysql>
美国东部时间2012年05月14日19:10更新

如果食品或颜色的值不存在,则调整后的查询如下:

SELECT
    table1.id,
    IFNULL(table2_A.words,'Unknown Color') colorname,
    IFNULL(table2_B.words,'Unknown Food') foodname
FROM table1 
LEFT JOIN table2 table2_A ON table1.color=table2_A.id 
LEFT JOIN table2 table2_B ON table1.food=table2_B.id;
我将向表1中添加行并运行此新查询

mysql> drop database if exists supercoolville;
Query OK, 2 rows affected (0.13 sec)

mysql> create database supercoolville;
Query OK, 1 row affected (0.00 sec)

mysql> use supercoolville;
Database changed
mysql> create table table1
    -> (
    ->     id int not null auto_increment,
    ->     color int,
    ->     food int,
    ->     primary key (id)
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into table1 (color,food) values
    -> (1,3),(1,4),(1,3),(1,4),
    -> (2,3),(2,4),(2,3),(2,4),
    -> (5,3),(5,4),(2,6),(2,8);
Query OK, 12 rows affected (0.07 sec)
Records: 12  Duplicates: 0  Warnings: 0

mysql> create table table2
    -> (
    ->     id int not null auto_increment,
    ->     words varchar(20),
    ->     primary key (id)
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into table2 (words) values
    -> ('yellow'),('blue'),('cookies'),('milk');
Query OK, 4 rows affected (0.06 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from table1;
+----+-------+------+
| id | color | food |
+----+-------+------+
|  1 |     1 |    3 |
|  2 |     1 |    4 |
|  3 |     1 |    3 |
|  4 |     1 |    4 |
|  5 |     2 |    3 |
|  6 |     2 |    4 |
|  7 |     2 |    3 |
|  8 |     2 |    4 |
|  9 |     5 |    3 |
| 10 |     5 |    4 |
| 11 |     2 |    6 |
| 12 |     2 |    8 |
+----+-------+------+
12 rows in set (0.00 sec)

mysql> select * from table2;
+----+---------+
| id | words   |
+----+---------+
|  1 | yellow  |
|  2 | blue    |
|  3 | cookies |
|  4 | milk    |
+----+---------+
4 rows in set (0.00 sec)

mysql> SELECT
    ->     table1.id,
    ->     IFNULL(table2_A.words,'Unknown Color') colorname,
    ->     IFNULL(table2_B.words,'Unknown Food') foodname
    -> FROM table1
    -> LEFT JOIN table2 table2_A ON table1.color=table2_A.id
    -> LEFT JOIN table2 table2_B ON table1.food=table2_B.id;
+----+---------------+--------------+
| id | colorname     | foodname     |
+----+---------------+--------------+
|  1 | yellow        | cookies      |
|  2 | yellow        | milk         |
|  3 | yellow        | cookies      |
|  4 | yellow        | milk         |
|  5 | blue          | cookies      |
|  6 | blue          | milk         |
|  7 | blue          | cookies      |
|  8 | blue          | milk         |
|  9 | Unknown Color | cookies      |
| 10 | Unknown Color | milk         |
| 11 | blue          | Unknown Food |
| 12 | blue          | Unknown Food |
+----+---------------+--------------+
12 rows in set (0.00 sec)

mysql>
如果有任何无效数据,
仍需要左连接。

尝试:

SELECT table1.id, colorcodes.words, foodcodes.words
FROM table1
LEFT JOIN table2 as colorcodes
    ON colorcodes.id = table1.color
LEFT JOIN table2 as foodcodes
    ON foodcodes.id= table1.food
以下是查询:

SELECT a.id as id, b.words as colorname, c.words as foodname
FROM table1 a
  LEFT JOIN table2 b ON b.id = a.color
  LEFT JOIN table2 c ON c.id = a.food

注意:从您的数据来看,不需要
左连接。如果表1中没有颜色或食物为空的行,那么您可以从呈现的数据中去掉

,看起来这可以通过直接的内部联接来完成--是否真的需要左联接?