SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.02.2013 13:12:32

Hauster
Участник
Зарегистрирован: 12.02.2013
Сообщений: 5

Помогите правильно построить запрос, возможно с IF

Есть запрос следующего вида:

SELECT characters.obj_Id, characters.clanid, olympiad_nobles.char_id, olympiad_nobles.char_name, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_done, olympiad_nobles.class_id, clan_data.clan_id, clan_data.crest_id, clan_data.ally_crest_id
FROM characters, olympiad_nobles, clan_data
WHERE characters.obj_Id = olympiad_nobles.char_id
AND characters.clanid = clan_data.clan_id
ORDER BY olympiad_nobles.competitions_done DESC , olympiad_nobles.olympiad_points DESC
LIMIT 0 , 30


Он должен связывать 3 таблицы, брать некоторую информацию из них всех и выводить.
У меня есть 3 героя в olympiad_nobles, один из них не имеет клан, а как вы можете видеть в запросе условие "AND characters.clanid = clan_data.clan_id", то есть он по нему не попадает в вывод, т.к. не имеет клана.
Как можно изменить условие, что бы выводились все трое, даже если в 3 таблице запись не существует?
P.S.: Пробовал манипулировать OR и AND, строя сложные запросы, а так же приплетал IF ( с которым так и не разобрался ).
Заранее спасибо за помощь! ^^

Неактивен

 

#2 12.02.2013 15:24:54

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно построить запрос, возможно с IF

.. LEFT JOIN clan_data ON characters.clanid = clan_data.clan_id ..

http://dev.mysql.com/doc/refman/5.5/en/join.html

Неактивен

 

#3 12.02.2013 17:17:10

Hauster
Участник
Зарегистрирован: 12.02.2013
Сообщений: 5

Re: Помогите правильно построить запрос, возможно с IF

vasya написал:

.. LEFT JOIN clan_data ON characters.clanid = clan_data.clan_id ..

http://dev.mysql.com/doc/refman/5.5/en/join.html

SELECT characters.obj_Id, characters.clanid, olympiad_nobles.char_id, olympiad_nobles.char_name, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_done, olympiad_nobles.class_id, clan_data.clan_id, clan_data.crest_id, clan_data.ally_crest_id
FROM characters, olympiad_nobles
LEFT JOIN clan_data ON characters.clanid = clan_data.clan_id
WHERE characters.obj_Id = olympiad_nobles.char_id
ORDER BY olympiad_nobles.competitions_done DESC , olympiad_nobles.olympiad_points DESC
LIMIT 0 , 30

Ошибка - #1054 - Unknown column 'characters.clanid' in 'on clause'

Неактивен

 

#4 13.02.2013 05:26:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно построить запрос, возможно с IF

А ссылку на доку я зачем давал?

INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).

However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur. Information about dealing with this problem is given later in this section.

Неактивен

 

#5 13.02.2013 14:04:32

Hauster
Участник
Зарегистрирован: 12.02.2013
Сообщений: 5

Re: Помогите правильно построить запрос, возможно с IF

vasya написал:

А ссылку на доку я зачем давал?

INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).

However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur. Information about dealing with this problem is given later in this section.

http://dev.mysql.com/doc/refman/5.5/en/join.html написал:

Information about dealing with this problem is given later in this section.

Так пока нельзя решить её?

Неактивен

 

#6 13.02.2013 15:42:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно построить запрос, возможно с IF

Hauster написал:

http://dev.mysql.com/doc/refman/5.5/en/join.html написал:

Information about dealing with this problem is given later in this section.

Так пока нельзя решить её?

Это предложение говорит о том, что решение находится далее в тексте.

Неактивен

 

#7 13.02.2013 18:17:59

Hauster
Участник
Зарегистрирован: 12.02.2013
Сообщений: 5

Re: Помогите правильно построить запрос, возможно с IF

vasya написал:

Hauster написал:

http://dev.mysql.com/doc/refman/5.5/en/join.html написал:

Information about dealing with this problem is given later in this section.

Так пока нельзя решить её?

Это предложение говорит о том, что решение находится далее в тексте.

Я не понимаю как правильно построить... Понял, что запятые менее приоритетней, чем JOIN и он просто не может найти таблицу, но я не понимаю, как построить сам запрос.

Неактивен

 

#8 13.02.2013 18:41:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно построить запрос, возможно с IF

Вместо: SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

Нужно:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);

или
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);

Неактивен

 

#9 13.02.2013 18:57:23

Hauster
Участник
Зарегистрирован: 12.02.2013
Сообщений: 5

Re: Помогите правильно построить запрос, возможно с IF

vasya написал:

Вместо: SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

Нужно:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);

или
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);

Низкий поклон тебе, добрый молодец!
Расцеловал бы тебя, но боюсь тебе не понравится.)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson