$sql= "select
tblservergroup.id,
tblservergroup.groupname,
if(tblservergroup.defserverpaid='0', '0', select concat(tblservers.ipaddress, ' (', tblservers.name, ')' ) as defaultserverpaiddesc from tblservers where tblservers.id=tblservergroup.defserverpaid),
if(tblservergroup.defserverfree='0', '0', select concat(tblservers.ipaddress, ' (', tblservers.name, ')' ) as defaultserverfreedesc from tblservers where tblservers.id=tblservergroup.defserverfree),
tblservergroup.note
from tblservergroup
";
这个类似的概念可以在MSSQL中完成,但是当我在mysql中编写它时,它显示错误。帮助。
最佳答案
如果你坚持使用子查询,你可以这样做:
SELECT
tblservergroup.id,
tblservergroup.groupname,
tblservergroup.note,
IF(defserverpaid='0', '0', (SELECT concat(ipaddress, ' (', name, ')') FROM tblservers WHERE id=defserverpaid)) AS defaultserverpaiddesc,
IF(defserverfree='0', '0', (SELECT concat(ipaddress, ' (', name, ')') FROM tblservers WHERE id=defserverfree)) AS defaultserverfreedesc
FROM
tblservergroup
我建议改用LEFT JOIN
:
SELECT
tblservergroup.id,
tblservergroup.groupname,
tblservergroup.note,
IF(defserverpaid='0', '0', concat(ts1.ipaddress, ' (', ts1.name, ')')) as defaultserverpaiddesc
IF(defserverfree='0', '0', concat(ts2.ipaddress, ' (', ts2.name, ')')) as defaultserverfreedesc
FROM
tblservergroup
LEFT JOIN tblservers ts1 ON ts1.id=defserverpaid
LEFT JOIN tblservers ts2 ON ts2.id=defserverfree
理想情况下,还可以在 defserverpaid
/defserverfree
中存储 NULL
而不是 0
,并添加外键约束。
关于sql - Mysql 内部查询不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518435/