2015-07-30 11 views
4

Я работал над некоторым из нашего кода на работе и наткнулся на эту структуру для SQL-запроса и был уверен, что это была опечатка в переменных нашего PHP, я ее запускал и работает.Mysql where clause синтаксис

Select column from table where value = column; 

Любой Я знаю, что всегда учил правильный синтаксис:

Select column from table where column = value; 

Есть ли основания для этого является законным, кроме SQL только чеки обе стороны уравнения равны друг другу? Я больше публикую это, потому что я нашел его действительно интересным, как «чем больше вы знаете».

+1

Есть некоторые хорошие ответы ниже, но я хочу, чтобы добавить возможную перспективу, почему был выбран этот синтаксис. Я лично начал применять синтаксис 'if (value == $ var)' в php, чтобы, если я случайно пропустил второй '=', он будет генерировать синтаксическую ошибку, а не назначать значение, когда я намеревался провести сравнение и ошибка времени выполнения, которая может остаться незамеченной. Это не обязательно относится к SQL, оно отлично работает в любом случае, но мне по крайней мере нравится это для других вещей. –

+0

Вы делаете действительно замечательный момент, считайте меня конвертером! Спасибо за ваш вклад. –

ответ

4

Оператор равенства (=) является симметричным - если a=b истинно, то так b=a. a и b могут быть именами столбцов, значениями или сложными выражениями. Обычно используется форма column=value, но синтаксически говоря, она полностью эквивалентна value=column.

+0

Почему мы не можем сравнивать кортежи в этом случае? «где 1,2 = 1,2», где его можно рассматривать как короткую руку для «где 1 = 1 и 2 = 2», –

1

Да, у вас есть это право, sql просто проверяет обе стороны уравнения. Уравнение могло даже содержать столбец на ни сторона! такие, как

SELECT column from table where 1=2; 
1

Синтаксис запроса SQL является:

SELECT what_to_select 
FROM which_table 
WHERE conditions_to_satisfy; 

Вы можете использовать любое условие, которое вы хотите, например:

SELECT * FROM table WHERE 1 

вернет вам все строки

то время как

SELECT * FROM table WHERE 0 

вернет вам ничего

после WHERE вы должны иметь состояние, ничего другого