您能否告知为什么此查询在 BASH shell 上返回“NULL”?基本上我需要编写脚本所以你能否也请告知在 BASH 脚本中执行查询的最佳实践是什么?
MySQL命令行界面
mysql> SELECT CONCAT(mail_name,"@",name) AS email_address,accounts.password
> FROM mail
> LEFT JOIN domains ON domains.id=mail.dom_id
> LEFT JOIN accounts ON accounts.id=mail.account_id LIMIT 2;
+-------------------------------------+----------+
| email_address | password |
+-------------------------------------+----------+
| [email protected] | password1|
| [email protected] | password2|
+-------------------------------------+----------+
2 rows in set (0.00 sec)
巴什外壳
# mysql test -e "SELECT CONCAT(mail_name,"@",name) AS email_address,accounts.password FROM mail LEFT JOIN domains ON domains.id=mail.dom_id LEFT JOIN accounts ON accounts.id=mail.account_id LIMIT 2;"
+---------------+----------+
| email_address | password |
+---------------+----------+
| NULL | password1|
| NULL | password2| |
+---------------+----------+
每当您尝试将字符串与 NULL 连接时,总是返回 NULL,并且出于某种原因,@ 在 MySQL 中被解释为 NULL。这就是查询返回 NULL 的原因。
由于您用 " 将字符串包装在 shell 中并在查询中使用它,因此查询中的字符串将被删除(字面意思是传递给 MySQL 的是 3 个字符串)。
您需要转义查询中的引号。
像这样:
或者