如何使用唯一键选择包含非唯一键的行?

时间:2015-07-23 06:44:00

标签: mysql

我有以下MySQL表格;

----------------------------
| id |   pid   | operation |
----------------------------
| 5  |   12    |  pending  |
| 7  |   19    |  sent     |
| 8  |   12    |  replaced |
| 9  |   16    |  sent     |
| 12 |   12    |  closed   |
| 14 |   21    |  sent     |
----------------------------

id是唯一的操作ID,而pid是产品ID,暗示对哪个产品进行了哪些操作,因此不是唯一的。我需要仅使用操作ID列出产品的所有操作。

我可以使用像<; p>这样的子选择来实现

SELECT * FROM operations WHERE pid = (SELECT pid FROM operations WHERE id = 8);

此查询列出了我需要的确切结果,例如;

----------------------------
| id |   pid   | operation |
----------------------------
| 5  |   12    |  pending  |
| 8  |   12    |  replaced |
| 12 |   12    |  closed   |
----------------------------

问题是;如果没有子选择,我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以像这样使用

SELECT a.* FROM operations a
join operations b on a.pid =b.pild
WHERE b.id=8

答案 1 :(得分:1)

使用JOIN

SELECT o1.* 
FROM operations o1 join
     operations o2 on o1.pid=o2.pid
WHERE o2.id = 8

结果:

id  pid operation
-------------------
5   12  pending
8   12  replaced
12  12  closed

SQL Fiddle

中的示例结果