SELECT 具有相同 ID 的行使用不同的 ID 作为条件?
SELECT rows with same id using different id as condition?
我有以下 table:
+----+-------------+-----------------+-----------+----------------+
| id | link_id[FK] | category_id[FK] | parent_id[FK] | sort_order |
+----+-------------+-----------------+-----------+----------------+
| 1 2 1 1 1 |
| 2 2 133 1 2 |
| 3 3 2 2 1 |
| 4 3 200 2 2 |
| 5 3 333 200 3 |
| 6 4 1 1 1 |
| 7 5 3 3 1 |
| 8 5 133 3 2 |
| 9 5 223 133 3 |
| 10 5 456 223 4 |
+-----------------------------------------------------------------+
我需要能够 SELECT
所有具有相同 link_id
的行,但使用 category_id
作为条件。所以这是我正在寻找的示例结果。
+----+-------------+-----------------+-----------+----------------+
| id | link_id[FK] | category_id[FK] | parent_id[FK] | sort_order |
+----+-------------+-----------------+-----------+----------------+
| 1 2 1 1 1 |
| 2 2 133 1 2 |
| 7 5 3 3 1 |
| 8 5 133 3 2 |
| 9 5 223 133 3 |
| 10 5 456 223 4 |
+-----------------------------------------------------------------+
我试过这个查询,但它只 returns 等于 category_id
133 的行。
SELECT *
FROM table a
WHERE (a.object_id,a.category_id) IN (
SELECT b.link_id,b.link_id
FROM table b
WHERE b.category_id = 133
AND a.link_id = b.link_id
) ORDER BY a.sort_order
我也尝试过 SELF JOIN,这基本上是我需要的,但后来我得到了单独的列,我需要像上面那样组合它们。
您首先需要从 category_id = 133
所在的 table 获取 link_id
s,然后查询 table 以获取包含该 link_id
的所有行.
SELECT * FROM `table`
WHERE link_id IN (
SELECT link_id FROM `table`
WHERE category_id = 133
)
ORDER BY link_id, sort_order
演示:http://sqlfiddle.com/#!9/67eb4/5
您也应该可以使用 "self join" 执行此操作:
SELECT a.* FROM `table` a
JOIN `table` b ON a.link_id = b.link_id
WHERE b.category_id = 133
ORDER BY a.link_id, a.sort_order
我有以下 table:
+----+-------------+-----------------+-----------+----------------+
| id | link_id[FK] | category_id[FK] | parent_id[FK] | sort_order |
+----+-------------+-----------------+-----------+----------------+
| 1 2 1 1 1 |
| 2 2 133 1 2 |
| 3 3 2 2 1 |
| 4 3 200 2 2 |
| 5 3 333 200 3 |
| 6 4 1 1 1 |
| 7 5 3 3 1 |
| 8 5 133 3 2 |
| 9 5 223 133 3 |
| 10 5 456 223 4 |
+-----------------------------------------------------------------+
我需要能够 SELECT
所有具有相同 link_id
的行,但使用 category_id
作为条件。所以这是我正在寻找的示例结果。
+----+-------------+-----------------+-----------+----------------+
| id | link_id[FK] | category_id[FK] | parent_id[FK] | sort_order |
+----+-------------+-----------------+-----------+----------------+
| 1 2 1 1 1 |
| 2 2 133 1 2 |
| 7 5 3 3 1 |
| 8 5 133 3 2 |
| 9 5 223 133 3 |
| 10 5 456 223 4 |
+-----------------------------------------------------------------+
我试过这个查询,但它只 returns 等于 category_id
133 的行。
SELECT *
FROM table a
WHERE (a.object_id,a.category_id) IN (
SELECT b.link_id,b.link_id
FROM table b
WHERE b.category_id = 133
AND a.link_id = b.link_id
) ORDER BY a.sort_order
我也尝试过 SELF JOIN,这基本上是我需要的,但后来我得到了单独的列,我需要像上面那样组合它们。
您首先需要从 category_id = 133
所在的 table 获取 link_id
s,然后查询 table 以获取包含该 link_id
的所有行.
SELECT * FROM `table`
WHERE link_id IN (
SELECT link_id FROM `table`
WHERE category_id = 133
)
ORDER BY link_id, sort_order
演示:http://sqlfiddle.com/#!9/67eb4/5
您也应该可以使用 "self join" 执行此操作:
SELECT a.* FROM `table` a
JOIN `table` b ON a.link_id = b.link_id
WHERE b.category_id = 133
ORDER BY a.link_id, a.sort_order