Как я могу упростить этот оператор SQL? - PullRequest
0 голосов
/ 15 мая 2011

У меня есть две таблицы, во-первых, мне нужно выполнить поиск, чтобы получить 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 в качестве вывода ... и мне нужно искать контент, который похож на% ключевое слово%. Итак, мне нужно запросить другой 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 станет очень очень длинным. Могу ли я объединить эти два утверждения в одном? Спасибо /

Ответы [ 2 ]

4 голосов
/ 15 мая 2011

Вы можете использовать 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%'
3 голосов
/ 15 мая 2011

Выполнить вложенный запрос:

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%'
...