Исправьте формат MySQL JOIN, чтобы избежать вложенного SELECT - PullRequest
0 голосов
/ 01 декабря 2009

У меня есть два отдельных оператора SELECT:

SELECT VCe.VId FROM `VCe` WHERE `YId` = 9007 AND `MaId` =76 AND `MoId` = 2851

SELECT r_pts.p_id FROM r_pts WHERE r_pts.v_id IN (57202, 57203, 69597, 82261, 82260, 69596, 69595, 82259)

Когда они запускаются отдельно, они оба завершаются менее чем за 0,05 секунды, однако, когда я вкладываю первый в секунду, оно резко увеличивается до 3,3 секунды.

Я хотел бы сделать соединение, чтобы я мог получить выходные данные из второго SELECT, используя первый выбор как набор результатов для IN (), но я не могу понять, как включить условия WHERE в JOIN. *

Редактировать: Кроме того, каков правильный синтаксис для объединения, как я запрашиваю?

Спасибо за вашу помощь, она ценится!

Ответы [ 2 ]

3 голосов
/ 01 декабря 2009

Эквивалентно запросу MattMcKnight , в то же время иллюстрируя "как включить WHERE условия в JOIN":

SELECT r.p_id 

  FROM r_pts r

       INNER JOIN VCe v
       ON v.VId = r.v_id
   AND 
       v.YId = 9007 
   AND 
       v.MaId = 76 
   AND 
       v.MoId = 2851
1 голос
/ 01 декабря 2009
SELECT r_pts.p_id FROM r_pts, 'VCe' WHERE r_pts.v_id = VCe.VId AND VCe.YId = 9007 AND VCe.MaId =76 AND VCe.MoId = 2851

Основная цель объединения - описать взаимосвязь двух таблиц. Из вашего примера я сделал вывод, что столбец v_id в таблице r_pts является внешним ключом, указывающим на первичный ключ VId в таблице VCe. Когда вы добавляете в запрос термин (например, «r_pts.v_id = VCe.VId»), который имеет поле из каждой таблицы, к которой вы хотите присоединиться, это говорит базе данных, как сопоставлять строки между таблицами, чтобы сделать «виртуальный строки », которые содержат столбцы из обеих таблиц. Другие ваши условия запроса ограничивают количество строк, включаемых в набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...