2012-06-12 2 views
0

Я пытаюсь немного узнать инструкции для выбора MySQL, и я как-то закончил выбор нескольких строк с одинаковыми значениями. Если я удалю последний JOIN, запрос выйдет правильно, но мне все еще нужны задачи. Rate_Schedule_ID соединен с hourlyrates.Rate_Schedule_ID, как показано в последнем заявлении JOIN.MySQL Join показывает несколько строк с одинаковым значением

EDIT: Он дублирует один раз для каждой строки. Вот картина результатов, которые я получаю.

enter image description here

SELECT 
project_timecard_tasks.Task_ID, 
project_timecard_tasks.DateTime, 
project_timecard_tasks.Total_Hours, 
project_timecard_tasks.User_ID, 
project_timecard_tasks.Project_ID, 
users.User_ID,users.FirstName, 
users.LastName, 
tasks.id, 
tasks.taskName, 
tasks.billingOption, 
tasks.fixedRate, 
tasks.Rate_Schedule_ID, 
hourlyrates.Rate_Schedule_ID, 
hourlyrates.hourlyRate 

FROM 
project_timecard_tasks 

JOIN users ON project_timecard_tasks.User_ID = users.User_ID 
JOIN tasks ON project_timecard_tasks.Task_ID = tasks.id 
JOIN hourlyrates ON tasks.Rate_Schedule_ID = hourlyrates.Rate_Schedule_ID 

WHERE 
project_timecard_tasks.Project_ID = '$jobNumber' 
+1

Сколько строк в 'hourlyrates' соответствует каждой записи из' задач'? – zerkms

+0

по одному для каждого ряда. Таким образом, он только дублирует один раз –

+0

, если соответствует только одна строка - тогда невозможно, что последние причины, которые возникают. Я уверен, что существует более одной строки, которая подходит для 'tasks.Rate_Schedule_ID = hourlyrates.Rate_Schedule_ID'. Поэтому я настоятельно рекомендую вам дважды проверить, что – zerkms

ответ

1

Вопрос заключается в том, что у вас есть несколько строк в ваш результат (из таблицы задач) с тем же Rate_Schedule_ID. Это означает, что для каждого из них вы получаете соответствие в таблице hourlyrates, которая дает вам два совпадения для каждой строки.

Вы можете изменить SELECT для SELECT DISTINCT, что устранит проблему. Но это может быть признаком того, что в ваших данных есть более глубокая проблема.

Способ проверить, действительно ли это проблема - посмотреть на набор результатов без последнего соединения. Если есть дубликаты Rate_Schedule_ID, то именно поэтому они дублируют строки.

+0

'SELECT DISTINCT' не решит проблему. И в большинстве случаев использование DISTINCT является индикатором того, что вы делаете что-то неправильно – zerkms

+0

Он исправит выход так, чтобы он не дублировал результаты, но он не решит основной проблемы, почему это происходит. Это также не поможет производительности. – juacala

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