-3

我有 2 张桌子。

表格1

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

表_2

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

我需要这样做

  1. 获取所有category_id的位置parent_id = given...(比如“1”)
  2. 在另一个表中查询where in (all the ids returned from 1) )... 应该是where in ('2,3,4')在示例情况下

输出

pro_id表 2 中(在这种情况下为 1,2,3)的所有字段..

试过这个..(希望这会奏效:))

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

但没有结果。

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

那么有可能做到这一点吗?从查询中获取结果并在单个查询中使用它?如果是这样,我将不胜感激您的帮助。

4

4 回答 4

3

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
于 2012-11-09T10:34:47.747 回答
2

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

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

总之谢谢各位...

于 2012-11-09T10:50:13.570 回答
1

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

select * from TABLE_2 where category_id in (...)
于 2012-11-09T10:33:57.653 回答
1
SELECT t2.*
FROM TABLE_1 t1
JOIN TABLE_2 t2 ON 
t2.category_id = t1.category_id
WHERE t1.parent_id = 1

但是您上面编写的查询应该可以工作。

于 2012-11-09T10:45:38.597 回答