2010-05-28 2 views
0

я в настоящее время работаю на запросе MySQL, который содержит таблицу:MySQL присоединиться к условным

TBL:lesson_fee 
-fee_type_id (PRI) 
-lesson_type_id (PRI) 
-lesson_fee_amount 

этой таблица содержит плату за определенный «тип урока» и существует различные «имена платы» (fee_type) , Это означает, что может быть много записей в этой таблице для одного «типа урока»

В моем запросе я вхожу в эту таблицу на остальную часть запроса через таблицу «lesson_type» с помощью:

lesson_fee 
INNER JOIN (other joins here) 
ON lesson_fee.lesson_type_id = lesson_type.lesson_type_id 

Проблема заключается в том, что в данный момент он возвращает дубликаты данных. 1 строка для каждой повторяющейся записи в таблице «плата за уроки».

Я также присоединение к «тип платы» таблицы с помощью этого «fee_type_id»

Есть ли способ сказать MySQL сказать «Join строки lesson_fee таблицы, которые lesson_fee.lesson_type_id и fee_type_id = client.fee_type_id» ,

UPDATE: Запрос:

SELECT 
lesson_booking.lesson_booking_id,lesson_fee.lesson_fee_amount 
FROM 
fee_type INNER JOIN 
     (lesson_fee INNER JOIN 
       (color_code INNER JOIN 
           (employee INNER JOIN 
             (horse_owned INNER JOIN 
              (lesson_type INNER JOIN 
                (timetable INNER JOIN 
                 (lesson_booking INNER JOIN CLIENT 
                 ON 
                 client.client_id = lesson_booking.client_id) 
                ON 
                lesson_booking.timetable_id = timetable.timetable_id) 
              ON 
              lesson_type.lesson_type_id = timetable.lesson_type_id) 
             ON 
             horse_owned.horse_owned_id = lesson_booking.horse_owned_id) 
           ON 
           employee.employee_id = timetable.employee_id) 
           ON 
           employee.color_code_id = color_code.color_code_id) 
       ON 
       lesson_fee.lesson_type_id = lesson_type.lesson_type_id) 
     ON 
     lesson_fee.fee_type_id = client.fee_type_id 
WHERE booking_date = '2010-04-06' 
ORDER BY lesson_booking_id ASC 

Обновление: Выход:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>query data</title> 
<style type="text/css" <!-- 
.normal { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-weight: normal; color: #000000} 
.medium { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; font-weight: bold; color: #000000; text-decoration: none} 
--></style> 
</head> 
<body> 
<h3>query result</h3><table border=1> 
<tr> 
<td bgcolor=silver class='medium'>lesson_booking_id</td><td bgcolor=silver class='medium'>lesson_fee_amount</td></tr> 
<tr> 
<td class='normal' valign='top'>0</td> 

<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>0</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>0</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>0</td> 

<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>5</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>5</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>5</td> 

<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>5</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>9</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>9</td> 

<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>9</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>9</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>11</td> 

<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>11</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>11</td> 
<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>11</td> 

<td class='normal' valign='top'>25.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>13</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>13</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>13</td> 

<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>13</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>16</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>16</td> 

<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>16</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
<tr> 
<td class='normal' valign='top'>16</td> 
<td class='normal' valign='top'>500.00</td> 
</tr> 
</table> 
</body></html> 
+0

Не могли бы вы разместить запрос, который у вас есть до сих пор? Я уверен, что смогу это сделать, собрав ключи в ваш вопрос, но это будет быстрее, если вы просто опубликуете его. –

+1

Было бы полезно узнать конечные данные, которые вы хотели бы увидеть в конце дня. –

+0

Вопрос обновлен. – conor

ответ

0

Это почти то, что вы пишете на английском языке

«Join строки lesson_fee таблицы, которые lesson_fee.lesson_type_id и fee_type_id = client.fee_type_id ".

FROM lesson_fee 
INNER JOIN client ON 
    lesson_fee.lesson_type_id=client_lesson_type_id AND 
    lesson_fee.fee_type_id=client.fee_type_id 

Предполагая lesson_fee (lesson_type_id, fee_type_id) является уникальным, то это будет возвращать одну строку из таблицы lesson_fee, а не по одному для каждого типа платы.

1

Пожалуйста, научитесь правильно использовать скобки в SQL - Я переписан существующий запрос:

SELECT lb.lesson_booking_id, 
     lf.lesson_fee_amount 
    FROM FEE_TYPE ft 
    JOIN TIMETABLE tt --cross join 
    JOIN COLOR_CODE cc --cross join 
    JOIN EMPLOYEE e ON e.employee_id = tt.employee_id 
        AND e.color_code_id = cc.color_code_id 
    JOIN HORSE_OWNED ho ON ho.horse_owned_id = lb.horse_owned_id 
    JOIN LESSON_TYPE lt ON lt.lesson_type_id = tt.lesson_type_id 
    JOIN LESSON_BOOKING lb ON lb.timetable_id = tt.timetable_id 
    JOIN CLIENT c ON c.client_id = lb.client_id 
    JOIN LESSON_FEE lf ON lf.lesson_type_id = lt.lesson_type_id 
         AND lf.fee_type_id = c.fee_type_id 
    WHERE booking_date = '2010-04-06' 
ORDER BY lesson_booking_id ASC 

Перекрестное соединение представляет собой декартово произведение. Если вы не укажете критерии (IE: ON ....) в INNER JOIN в MySQL - результатом является перекрестное объединение/декартово произведение.

ТОЛЬКО ИСПОЛЬЗУЙТЕ скобки, когда необходимо выполнить одну или несколько вещей.. Пример:

WHERE a = b AND c = d OR c = e 

... вернет другой результат, набор из:

WHERE (a = b AND c = d) OR c = e 

Вы бы только использовать кронштейны ПОСЛЕ Порция О оговорки - нет вложенности. Вложение происходит из критериев присоединения. Я пытаюсь структурировать свои запросы, чтобы он читал сверху вниз, так что на основе критериев соединения вы можете увидеть, как одна таблица относится к следующей. IE, если у вас есть таблица, относящаяся к двум или более таблицам, она должна быть выше в списке, чем другие, потому что другие зависят от нее. Посмотрите на TIMETABLE в качестве примера ...

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