0

我有两张桌子,首先,我需要做一些搜索来获得另一个像这样的桌子的 fk ......

SELECT `related_table_id` 
FROM `table_a` 
WHERE `users_id` = '14' 
  AND `user_data_status` = 'n' 
  AND `another_table_name` = 'table_b'

然后,我有很多related_table_id 作为输出......我需要搜索内容,就像%keyword%。所以,我需要像这样查询另一个 SQL:

SELECT * 
FROM table_b 
WHERE (`table_b_id`='218' OR  `table_b_id`='219' OR  `table_b_id`='225') 
  AND `content` LIKE '%keyword%'

问题是,当我的db长大了,table_b,可能有很多数据可以从table_a查询,所以,sql语句会变得非常非常长。我可以将这两个语句合二为一吗?谢谢/

4

2 回答 2

4

您可以使用INNER JOIN“匹配”两个或多个表的行。

SELECT table_b.* 
FROM table_b 
INNER JOIN table_a
ON table_a.related_table_id = table_b.table_b_id
WHERE table_a.users_id = '14' 
  AND table_a.user_data_status = 'n' 
  AND table_a.another_table_name = 'table_b'
  AND table_b.content LIKE '%keyword%'
于 2011-05-15T14:32:02.740 回答
3

做一个嵌套查询:

SELECT * FROM table_b WHERE `table_b_id` IN (SELECT `related_table_id` FROM `table_a` WHERE `users_id` = '14' AND `user_data_status` = 'n' AND `another_table_name` = 'table_b') AND `content` LIKE '%keyword%'
于 2011-05-15T14:29:44.033 回答