2015-02-09 3 views
1

У меня есть 3 таблицы, и я пытаюсь присоединиться к этим таблицам с внутренним соединением. Однако, когда я использую count(distinct column_id) это MySQL через ошибки, которая является синтаксисвнутреннее соединение на нескольких таблицах, count & distinct

SQL: проверить

на право синтаксиса использовать вблизи «(. DISTINCT as_ticketvehicle_id) ОТ as_vehicle INNER JOIN as_ticket

Мой запрос

SELECT 
      `as_vehicle`.`make`, `as_vehicle`.`model`, `as_odometer`.`value` 
COUNT  (DISTINCT `as_ticket`.`vehicle_id`) 
FROM  `as_vehicle` 
INNER JOIN `as_ticket` 
ON   `as_vehicle`.`vehicle_id` = `as_ticket`.`vehicle_id` 
INNER JOIN `as_odometer` 
ON   `as_odometer`.`vehicle_id` = `as_vehicle`.`vehicle_id` 
WHERE  `as_ticket`.`vehicle_id` = 7 
ORDER BY `as_odometer`.`value` 
DESC 


Tbl as_vehicle 
+------------+-------------+---------+ 
| vehicle_id |make   | model | 
+------------+-------------+---------| 
|   1 | HYUNDAI  | SOLARIS | 
|   2 | A638EA15 | ACCENT | 
+-------------+------------+---------+ 

Tbl as_odometer; 
+------------+-------+ 
| vehicle_id | value | 
+------------+-------+ 
|   1 | 10500 | 
|   5 | 20000 | 
|   1 | 20000 | 
+------------+-------+ 

Tbl service 
+-----------+------------+ 
| ticket_id | vehicle_id | 
+-----------+------------+ 
|   1 |   1 | 
|   2 |   1 | 
+-----------+------------+ 

ответ

4

Вы забыли запятую передние count.

SELECT `as_vehicle`.`make`, `as_vehicle`.`model`, `as_odometer`.`value`, 
     count(DISTINCT `as_ticket`.`vehicle_id`) //   here ---^ 
+0

Оу, я попробовал, что ... теперь через эту ошибку –

+0

синтаксиса использовать вблизи «DISTINCT' as_ticket'.'vehicle_id') FROM 'as_vehicle' INNER JOIN' as_ticket –

+0

У вас есть какие-то невидимые символы вокруг 'подсчета '. Удалите эту часть и запишите ее снова на клавиатуре. После этого это сработало для меня. –

2

Во-первых, вы не должны иметь место после count() и у Вас есть недостающий запятой (как уже отмечалось). Что еще более важно, у вас нет group by, поэтому ваш запрос вернет одну строку.

И из-за пункта where значение всегда будет «1». Вы ограничили запрос только одним идентификатором транспортного средства.

Я подозреваю, что запрос вы хотите больше похож:

SELECT `as_vehicle`.`make`, `as_vehicle`.`model`, `as_odometer`.`value` 
     COUNT(*) 
FROM `as_vehicle` INNER JOIN 
    `as_ticket` 
    ON `as_vehicle`.`vehicle_id` = `as_ticket`.`vehicle_id` INNER JOIN 
    `as_odometer` 
    ON `as_odometer`.`vehicle_id` = `as_vehicle`.`vehicle_id` 
WHERE `as_ticket`.`vehicle_id` = 7 
GROUP BY `as_vehicle`.`make`, `as_vehicle`.`model`, `as_odometer`.`value` 
ORDER BY `as_odometer`.`value` DESC; 

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

+0

Спасибо, Гордон Линофф, он решил. by juergen. Действительно оценил ваши проблемы ز –

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