sql - Mysql 内部查询不工作

标签 sql mysql

    $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/

相关文章:

sql - 将三行(包含空值)的数据合并为一行

sql - 使用 postgres 创建连续的证书编号

mysql执行查询性能低下

mysql - 设置一个变量来标识 MySQL 中要求和的特定字段

php - 哪种数据类型最适合存储时间和日期

sql - SQL Server-触发器会影响@@ Rowcount吗?

php - 表中存在时如何从表中选择

sql - 如何从 c 执行 DDL?

php - php 上的动态表单用于插入输入

Python,mysql.connector 错误 : No Result Set to Fetch From; cgitb shows correct value being passed to function