MySQL: работа с @vars и подзапросами - PullRequest
3 голосов
/ 07 декабря 2010

Я думаю, MySQL - самый сложный язык для меня, я начал изучать MySQL год назад, и я до сих пор не понимаю, что я могу сделать и как я могу строить свои запросы, не спрашивая здесь.

У меня есть простой запрос, где я хотел бы посмотреть, как я могу @vars, поэтому я попробовал это:

SELECT param_1, @param := param_2, @param
FROM my_table

результат:

param_1    @param := param_2       @param
Dave       3                       [BLOB - 1B]
Mike       4                       [BLOB - 2B]
Luke       2                       [BLOB - 2B]
Bob        65                      [BLOB - 2B]
Dean       6                       [BLOB - 2B]

Не ожидалось, что @param будет равно param_2?

param_1    @param := param_2       @param
Dave       3                       3
Mike       4                       4
Luke       2                       2
Bob        65                      65
Dean       6                       6

Что такое [BLOB - 1B] и [BLOB - 2B]?

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

SELECT table_1.param_1, table_1.param_2, @param = table_1.param_3, new_table_2.param_1,     new_table_2.param_2
FROM table_1
LEFT JOIN (SELECT *
            FROM table_2
            WHERE new_table_2.param_1 = @param
            LIMIT 1
           ) new_table_2
ON new_table_2.param_1 = @param
WHERE table_1.param_2 = 33

Мои вопросы:

Почему я получаю [BLOB - 1B] и [BLOB - 2B] в первом запросе?

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

Когда следует использовать подзапросы?

По сути, каков процесс запроса, существует ли какое-либо четкое руководство по возврату данных?

1 Ответ

0 голосов
/ 20 декабря 2010

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

SELECT 
  table_1.param_1, 
  table_1.param_2, 
  table_1.param_3, 
  new_table_2.param_1, 
  new_table_2.param_2
FROM table_1
LEFT JOIN 
(
  SELECT * FROM table_2 WHERE new_table_2.param_1 = table_1.param3 LIMIT 1
) as new_table_2
ON new_table_2.param_1 = table_1.param3
WHERE table_1.param_2 = 33;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...