2013-05-30 4 views
1

К сожалению, для большей части моей карьеры я использую причудливую французскую базу данных под названием 4-е измерение. И он действовал совсем по-другому, чем MySQL. Поэтому, пожалуйста, несите меня на вопрос, который может быть очень простым.Повторяющиеся записи, возвращаемые в MySQL

У меня есть Bult запрос следующим образом:

SELECT c.id, p.last_name, e.full_name, l.Current_step, l.Current_Step_date, 
FROM customer as c, lesson as l , Employee as e 
WHERE l.Prospect_ID =c.id 
AND c.ID_ofProducer= e.id 
AND last_name = 'Smith' 

Я получаю обратно 3 записей. Но они все одинаковые.

ID  Last_name  Full_name  Current_Step  Current_Step_date 
61245 Smith   Jim Jones  Registered  2013-04-14 
61245 Smith   Jim Jones  Registered  2013-04-14 
61245 Smith   Jim Jones  Registered  2013-04-14 

Я DID ожидал получить 61245 Smith назад.

Но; Я не ожидал, что это вернет эхом 3 раза.

Может кто-то может пролить свет на то, что, черт возьми, я сделал неправильно/что я должен был сделать?

+0

уверены это db, а не ваш код работает и/или отображает результаты 3 раза? –

+2

Вы выбираете 3 таблицы. – crush

+1

Попробуйте добавить DISTINCT или GROUP BY - одна из ваших записей находится в одной из этих трех таблиц несколько раз, вызывая дубликаты результатов. – sgeddes

ответ

1

Возможно, существуют различия в других областях. Чтобы увидеть их, это должно работать:

SELECT * 
FROM customer as c, lesson as l , Employee as e 
WHERE l.Prospect_ID =c.id 
AND c.ID_ofProducer= e.id 
AND last_name = 'Smith' 

Если нет разницы, то есть дубликаты в одном или нескольких таблиц.

Если вы хотите устранить такие дубликаты, вы можете сделать это с distinct ключевым словом:

SELECT distinct c.id, p.last_name, e.full_name, l.Current_step, l.Current_Step_date 
FROM customer as c, lesson as l , Employee as e 
WHERE l.Prospect_ID =c.id 
AND c.ID_ofProducer= e.id 
AND last_name = 'Smith' 

Если это не поддерживается, вы можете сделать то же самое с group by:

SELECT c.id, p.last_name, e.full_name, l.Current_step, l.Current_Step_date 
FROM customer as c, lesson as l , Employee as e 
WHERE l.Prospect_ID =c.id 
AND c.ID_ofProducer= e.id 
AND last_name = 'Smith' 
group by c.id, p.last_name, e.full_name, l.Current_step, l.Current_Step_date 
+0

Просто из интереса, какая база данных SQL не поддерживает 'DISTINCT'? :) –

+0

@JoachimIsaksson. , , Процитировать OP: «Я использую причудливую французскую базу данных под названием« 4-мерное измерение ». Вот почему я не упоминаю о неявных объединениях; база данных может не поддерживать синтаксис 'join'. –

+0

Возможно, я немного завуалирован тем, что возвращает запрос MYsql. Я привык к тому, что набор записей вернулся ко мне. То есть база данных возвращает мне массив указателей на соответствующие записи. Обычно это один бит в каталоге, который указывает YES на NO, что он является частью набора записей. (Эй, это старая школа и сэкономила массу памяти, когда 64K была абсолютной роскошью). Кажется, что mySql на самом деле делает извлечение данных, которые вы запрашиваете, из базы данных и представляет собой «копию» в строках. Я здесь дурацкая? – JVMX

1

Я думаю, вы можете использовать GROUP BY совокупность функций.

SELECT c.id, p.last_name, e.full_name, l.Current_step, l.Current_Step_date, 
FROM customer as c, lesson as l , Employee as e 
WHERE l.Prospect_ID =c.id 
AND c.ID_ofProducer= e.id 
AND last_name = 'Smith' 
GROUP BY c.id 
+1

Неполная 'GROUP BY' действительно будет работать на MySQL, где будет выбирать случайную строку, но она не будет работать ни на одной другой базе данных. То, что будет работать везде, - это «ОТЛИЧИЕ». –

Смежные вопросы