альтернативный способ отличить - PullRequest
2 голосов
/ 18 декабря 2008

У меня есть SQL заявление, как это

SELECT DISTINCT results_sp_08.material_number FROM results_sp_08
        INNER JOIN courses ON results_sp_08.material_number = courses.material_number
        INNER JOIN users ON results_sp_08.id = users.id
        AND results_sp_08.doctor = 'xx260'

Мне нужен альтернативный способ DISTINCT, чтобы использовать его в версии MySQL: 4.1.22?

есть другой способ или хитрость?

Ответы [ 7 ]

3 голосов
/ 18 декабря 2008

DISTINCT функционально эквивалентно GROUP BY <all the columns in your select list>

2 голосов
/ 18 декабря 2008

Как и Джоэл, вам лучше всего добавить предложение GROUP BY. В вашем случае

GROUP BY results_sp_08.material_number
0 голосов
/ 19 декабря 2008

я думаю, что нам здесь не хватает важной информации. DISTINCT отлично работает в MySQL 4.1.22, так почему вам нужна альтернатива?

содержит ли столбец material_number литеральную строку "EE432 - EE432 - EE352 - EE352" или ваш запрос возвращает 4 строки? если это строка, никакое количество SQL вам не поможет.

0 голосов
/ 18 декабря 2008

Не зная структуры таблиц, трудно сказать. Вы должны сказать словами, что вы пытаетесь сделать.

Предполагая, что result_sp_08 содержит только уникальные "material_number" s, и Вы пытаетесь получить весь уникальный номер материала, в котором есть хотя бы одна строка в таблицах курсов и пользователей:

SELECT results\_sp\_08.material\_number
FROM results\_sp\_08
WHERE results\_sp\_08.doctor = 'xx260' and
EXISTS(select * from courses
    where results\_sp\_08.material\_number = courses.material\_number) and
EXISTS(select * from users
    where results\_sp\_08.id = users.id)

См. Документацию: http://dev.mysql.com/doc/refman/4.1/en/exists-and-not-exists-subqueries.html

0 голосов
/ 18 декабря 2008

Мне нужно DISTINCT, чтобы выбрать неповторяющиеся элементы, как в примере, который у меня есть в одном столбце, содержащем эти значения (EE432 - EE432 - EE352 - EE352). Мой оператор sql вернет только EE432 и EE352.

так что мне нужен альтернативный способ сделать это

0 голосов
/ 18 декабря 2008

Я успешно устранил DISTINCT, добавив больше предложений в мой WHERE в прошлом. Вам нужно посмотреть, какие поля в ваших JOIN-файлах приводят к возвращению нескольких строк. Подзапрос может также работать.

0 голосов
/ 18 декабря 2008

Я обычно использую стратегию двойного соединения:

JOIN tablex AS x1 ON whatever  
LEFT JOIN tablex AS x2 ON whatever  
    AND x2.pkid < x1.pkid AND x2.somefield IS NULL

, что гарантирует, что я получу максимум 1 запись на все мои объединения.

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