mysql从父级中选择子级并在另一个查询中使用它

时间:2012-11-09 10:27:21

标签: mysql database

我有2张桌子。

TABLE_1

category_id   name   parent_id
1             test    0
2             test1   1 
3             test2   1  
4             test3   1
5             test4   2
.

TABLE_2

pro_id   category_id   name
1        2            prod1
2        2            prod2
3        3            prod3
4        5            prod4
.
. 
.

我需要这样做

  1. 获取所有category_id s parent_id = given...(说'1')
  2. where in (all the ids returned from 1) )的另一个表格中查询... 在示例中应为where in ('2,3,4')
  3. 输出

    表2中的pro_id(本例中为1,2,3)的所有字段。

    尝试了这个..(希望这会起作用:))

    select * from TABLE_2 
    where category_id in (select category_id from TABLE_1 where parent_id = 1) 
    

    但没有结果。

    我本可以在PHP脚本中完成所有这些操作。但是有一个分页问题。所以我想让它在一个查询中工作。

    那么可以这样做吗?从查询中获取结果并在单个查询中的其他查询中使用它?如果是这样,那么我将非常感谢你的帮助。

4 个答案:

答案 0 :(得分:2)

IN是一个非常慢的运算符,因为SQL通常将它计算为由“OR”分隔的一系列WHERE子句(WHERE x = Y OR x = Z OR ...)。

所以试试这个

SELECT t2.*
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.category_id = t1.category_id
WHERE t1.parent_id = 1

答案 1 :(得分:2)

这很奇怪..但我提供的查询正在工作...... :) :)

select * from TABLE_2 where category_id in (select category_id from TABLE_1 where parent_id = 1) 
无论如何,谢谢你们......

答案 2 :(得分:1)

您必须在WHERE子句中提供字段。

select * from TABLE_2 where category_id in (...)

答案 3 :(得分:1)

SELECT t2.*
FROM TABLE_1 t1
JOIN TABLE_2 t2 ON 
t2.category_id = t1.category_id
WHERE t1.parent_id = 1

但是你上面写的查询应该有效。