MySQL中的内部连接

MySQL中的内部连接,mysql,sql,Mysql,Sql,这是我的两张桌子: 表名:朋友 +-------+---------+---------+-------------------+ | id | firstName | lastName | city | +-------+--------------+------------+-----------+ | 1 | dudi | edri | london | | 2 | maor | azulay

这是我的两张桌子:

表名:朋友

+-------+---------+---------+-------------------+
|  id   |  firstName   |  lastName  | city      |
+-------+--------------+------------+-----------+
| 1     | dudi         | edri       | london    |
| 2     | maor         | azulay     | madrid    |
| 3     | batel        | azulay     | tel aviv  |
| 4     | nir          | cohen      | barcelona |
| 5     | evia         | perez      | miami     |
| 6     | neria        | perez      | new-york  | 
| 7     | nevo         | kakoun     | roma      |
+-------+---------+---------+-------------------+
+-------+---------+---------+-----------------+
|  id   |  firstName   |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | dudi         | 5684     | shipped   |
| 2     | maor         | 4896     | shipped   |
| 3     | batel        | 2496     | delay     |
+-------+--------------+----------+-----------+
+-------+---------+---------+-----------------+
|  id   |  friendID    |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | 1            | 5684     | shipped   |
| 2     | 2            | 4896     | shipped   |
| 3     | 3            | 2496     | delay     |
+-------+--------------+----------+-----------+
表名:订单

+-------+---------+---------+-------------------+
|  id   |  firstName   |  lastName  | city      |
+-------+--------------+------------+-----------+
| 1     | dudi         | edri       | london    |
| 2     | maor         | azulay     | madrid    |
| 3     | batel        | azulay     | tel aviv  |
| 4     | nir          | cohen      | barcelona |
| 5     | evia         | perez      | miami     |
| 6     | neria        | perez      | new-york  | 
| 7     | nevo         | kakoun     | roma      |
+-------+---------+---------+-------------------+
+-------+---------+---------+-----------------+
|  id   |  firstName   |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | dudi         | 5684     | shipped   |
| 2     | maor         | 4896     | shipped   |
| 3     | batel        | 2496     | delay     |
+-------+--------------+----------+-----------+
+-------+---------+---------+-----------------+
|  id   |  friendID    |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | 1            | 5684     | shipped   |
| 2     | 2            | 4896     | shipped   |
| 3     | 3            | 2496     | delay     |
+-------+--------------+----------+-----------+
我的问题是: 我想要没有秩序的朋友。 答案是:

| 4     | nir          | cohen      | barcelona |
| 5     | evia         | perez      | miami     |
| 6     | neria        | perez      | new-york  | 
| 7     | nevo         | kakoun     | roma      |
+-------+---------+---------+-------------------+
我是如何使用内部联接编写查询的。
谢谢。

您不应该在
订单
中使用
名字
作为外键。外键应引用主键。使用
ID
from
FRIENDS
如:

表名:订单

+-------+---------+---------+-------------------+
|  id   |  firstName   |  lastName  | city      |
+-------+--------------+------------+-----------+
| 1     | dudi         | edri       | london    |
| 2     | maor         | azulay     | madrid    |
| 3     | batel        | azulay     | tel aviv  |
| 4     | nir          | cohen      | barcelona |
| 5     | evia         | perez      | miami     |
| 6     | neria        | perez      | new-york  | 
| 7     | nevo         | kakoun     | roma      |
+-------+---------+---------+-------------------+
+-------+---------+---------+-----------------+
|  id   |  firstName   |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | dudi         | 5684     | shipped   |
| 2     | maor         | 4896     | shipped   |
| 3     | batel        | 2496     | delay     |
+-------+--------------+----------+-----------+
+-------+---------+---------+-----------------+
|  id   |  friendID    |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | 1            | 5684     | shipped   |
| 2     | 2            | 4896     | shipped   |
| 3     | 3            | 2496     | delay     |
+-------+--------------+----------+-----------+
并使用
左外部联接进行查询

SELECT f.*
FROM FRIENDS f
LEFT JOIN  ORDERS o
  ON f.ID = o.friendID
WHERE o.ID IS NULL;

另一种可能是使用
相关子查询

SELECT f.*
FROM FRIENDS f
WHERE NOT EXISTS (SELECT 1
                  FROM orders o
                  WHERE o.friendID = f.ID);


表:

CREATE TABLE friends(
  id        INTEGER  NOT NULL PRIMARY KEY     -- you can add AUTO_INCREMENT if needed
   ...
);

CREATE TABLE orders(
  id       INTEGER  NOT NULL PRIMARY KEY     
  ,friendID INTEGER  NOT NULL
  ,FOREIGN KEY (friendID) REFERENCES friends(id)
  ...
);

您不应该在
ORDERS
中使用
firstName
作为外键。外键应引用主键。使用
ID
from
FRIENDS
如:

表名:订单

+-------+---------+---------+-------------------+
|  id   |  firstName   |  lastName  | city      |
+-------+--------------+------------+-----------+
| 1     | dudi         | edri       | london    |
| 2     | maor         | azulay     | madrid    |
| 3     | batel        | azulay     | tel aviv  |
| 4     | nir          | cohen      | barcelona |
| 5     | evia         | perez      | miami     |
| 6     | neria        | perez      | new-york  | 
| 7     | nevo         | kakoun     | roma      |
+-------+---------+---------+-------------------+
+-------+---------+---------+-----------------+
|  id   |  firstName   |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | dudi         | 5684     | shipped   |
| 2     | maor         | 4896     | shipped   |
| 3     | batel        | 2496     | delay     |
+-------+--------------+----------+-----------+
+-------+---------+---------+-----------------+
|  id   |  friendID    |  amount  | status    |
+-------+--------------+----------+-----------+
| 1     | 1            | 5684     | shipped   |
| 2     | 2            | 4896     | shipped   |
| 3     | 3            | 2496     | delay     |
+-------+--------------+----------+-----------+
并使用
左外部联接进行查询

SELECT f.*
FROM FRIENDS f
LEFT JOIN  ORDERS o
  ON f.ID = o.friendID
WHERE o.ID IS NULL;

另一种可能是使用
相关子查询

SELECT f.*
FROM FRIENDS f
WHERE NOT EXISTS (SELECT 1
                  FROM orders o
                  WHERE o.friendID = f.ID);


表:

CREATE TABLE friends(
  id        INTEGER  NOT NULL PRIMARY KEY     -- you can add AUTO_INCREMENT if needed
   ...
);

CREATE TABLE orders(
  id       INTEGER  NOT NULL PRIMARY KEY     
  ,friendID INTEGER  NOT NULL
  ,FOREIGN KEY (friendID) REFERENCES friends(id)
  ...
);

您不应该在
订单中使用firstName作为外键。它没有任何意义-外键应该引用主键。要进行内部联接的列是:idCorrect。所以要解决这个问题。你不应该在
ORDERS
中使用firstName作为外键。它没有任何意义-外键应该引用主键。要进行内部联接的列是:idCorrect。所以要解决这个问题。