2013-11-19 6 views
0

У меня есть проблема с запросом ..MYSQL QUERY Извлечение нескольких записей

SELECT av.A, 
     ad.* 
FROM ads ad 
    RIGHT JOIN `B` av 
    ON ad.serial = av.adid 
WHERE ad.status='1' 
     AND EXISTS (SELECT * 
        FROM attvalues 
        WHERE adid =ad.serial 
         AND (av.atrid = '104' 
           AND av.atrid = '98')) 

я хочу, чтобы получить что соответствует обоим условиям 104 и 98. Я могу использовать ИЛИ, но это будет соответствовать только 1 условие

Вы также можете дать мне альтернативный запрос, если этот путь неправильный.

+5

Как можно «av.atrid» быть равно 104 и 98 одновременно? –

+0

Пожалуйста, объясните, что вы хотите. Если вы хотите найти запись, в которой поле _one_ имеет _two_ разные значения одновременно, тогда ваш запрос будет правильным, и он будет _never_ возвращать _anything_, так как av.atrid может _never_ иметь два разных значения в любое время. Поэтому, пожалуйста, лучше объясните, что вы пытаетесь достичь. – oerkelens

ответ

0

Я предполагаю, что вы хотите получить записи, для которых есть запись с atrid 104 и запись с atrid 98. В этом случае вы хотите, чтобы все ваши записи имели 98 OR 104, и их должно быть ровно 2, поэтому я предлагаю группу и счетчик (*). Обратите внимание, что я предполагаю, также, что ваш atrid в attvalues, так как я не могу думать о каком-либо способе иначе сделать ваш ИНЕК работу, вы не можете выбрать Фро attvalues ​​где некоторое значение в B имеет какое-либо значение ...

SELECT av.A, 
     ad.* 
FROM ads ad 
    RIGHT JOIN `B` av 
    ON ad.serial = av.adid 
WHERE ad.status='1' 
     AND EXISTS (SELECT X.adid 
        FROM attvalues X 
        WHERE X.adid =ad.serial 
         AND (X.atrid = '104' OR X.atrid = '98') 
        GROUP BY X.adid 
         HAVING COUNT(*) = 2) 
Смежные вопросы