mysql - 使用 If 条件选择多个字段,在 mysql 中使用左连接 - 抛出错误

标签 mysql if-statement left-join conditional-statements

感谢任何帮助--

1064 - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以了解在行附近使用的正确语法 'as receiverimage, re.fName as receiverfName , re.lName as receiverlName , re.add'

SELECT co.*, 
if(( co.senderid = 1) , ( re.image as receiverimage, re.fName as receiverfName , re.lName as receiverlName , re.address as receiverAddress , re.city as receivercity , re.state as receiverstate, re.country as receivercountry, re.zipCode as receiverzip),(se.address as senderAddress,se.city as sendercity , se.state as senderstate , se.country as sendercountry , se.zipCode as senderzip , se.image as senderimage ,se.fName as senderfName, se.lName as senderlName )) 
FROM contacts as co
LEFT JOIN users as se ON( se.id = co.senderid )
LEFT JOIN users as re ON( re.id = co.receiverid )
where (senderid = 1 OR receiverid = 1) 

-- 是在连接表上选择多个字段无效还是其他原因?

我无法找出确切原因,基本概率。这里是根据join从用户表中根据if条件选择几个字段。

最佳答案

你不能在 if 语句中使用别名。我刚刚测试了您的查询,删除别名后问题得到解决。

if(( co.senderid = 1) , ( re.image, re.fName, re.lName, re.address, re.city, re.state, re.country, re.zipCode), (se.address,se.city, se.state, se.country, se.zipCode, se.image,se.fName, se.lName )) AS mydata

编辑:您还应该为整个 IF 添加一个别名,这样您就不会将表达式作为列名:)

编辑 2:抱歉,我写得太早了。您不能像这样在一次选择中选择多行。如果您需要该数据,则必须编写一个子查询,或者为您需要的每一列放置一个 if。

IF(co.senderid = 1, re.image, se.address,) as col1
IF(co.senderid = 1, re.fName, se.city) as col2
IF(co.senderid = 1, re.lName, se.state) as col3
IF(co.senderid = 1, re.address, se.country) as col4

等等......你明白了:)

关于mysql - 使用 If 条件选择多个字段,在 mysql 中使用左连接 - 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513881/

相关文章:

mysql - 从 PhpStorm 中的文件(csv、sql)向 MySQL 插入数据

if-statement - Windows 批处理文件如果失败 - 30000000000000 如何等于 40000000000?

swift - 解决 Swift 3 中过多的 else-if 语句

php - Joomla 查询选择左连接 $var

php - 使用 LEFT OUTER JOIN 连接多个表

php - MySQL 根据现有值插入选择

php - 如何在两个相关的 PHP MySQL 查询中排序?

mysql - 在可以加入的地方加入,否则不加入

javascript - 语法错误 - 逻辑 if 语句

mysql - LEFT JOIN 返回所有带有 NULL 的内容