选择语句mysql中的别名@和:=?

时间:2015-01-15 12:32:20

标签: mysql

我刚刚看到以下mysql语法,并且还没有找到它到目前为止的内容。不确定谷歌的用途:

SELECT @M_ID:=member.M_ID FROM member LEFT OUTER JOIN member_status
ON member.M_ID=member_status.M_ID
WHERE member_status.M_ID IS NULL;

这个@M_ID:=究竟做了什么以及它叫做什么?

2 个答案:

答案 0 :(得分:1)

@M_ID是一个变量。

@M_ID :=是在select语句中分配变量的语法。 (对于set@M_ID =就足够了。)

此查询:

SELECT @M_ID := member.M_ID
FROM member LEFT OUTER JOIN
     member_status
     ON member.M_ID = member_status.M_ID
WHERE member_status.M_ID IS NULL;

返回member中没有相应行的member_status行。 @M_ID正在将其中一个值分配给变量。

这看起来像一个糟糕的编码实践,因为多个id可能不匹配,并且表达式只返回一个。例如,如果你想将它们全部放入以逗号分隔的列表中,你可以这样做:

SELECT @M_ID := GROUP_CONCAT(member.M_ID)
FROM member LEFT OUTER JOIN
     member_status
     ON member.M_ID = member_status.M_ID
WHERE member_status.M_ID IS NULL;

我并不主张将值存储为列表;只是指出代码可能只返回许多值中的一个。

答案 1 :(得分:0)

正如评论所说,用户定义的变量。