Mysql查询,比较表结果

标签 mysql

当我分别执行这些查询时,我得到的结果如下 $sql1->first 2 列,$sql2->second 2 列:

$userid='AD0004';
$comp_code='AD';

$sql1 = "SELECT DISTINCT CCCOMPANY, CCCNTY
        FROM D.TMTBCNTC
        WHERE CCCOMPANY='$comp_code'";

// //gets USER & their counties
$sql2 = "SELECT DISTINCT UCCOMPANY, UCCNTY
        FROM D.TMTBCNTU
        WHERE UCUSERID='$userid'
        AND UCCOMPANY='$comp_code'";

CCCOMPANY CCCNTY UCCNTY UCCOMPANY
AD      AT              
AD      BB      BB      AD
AD      BE      BE      AD
AD      BR      BR      AD
AD      CM      CM      AD
AD      CO      CO      AD
AD      DE      DE      AD
AD      EB      EB      AD
AD      EP      EP      AD
AD      FB      FB      AD
AD      GB              
AD      GU      GU      AD
AD      GV      GV      AD
AD      HA      HA      AD
AD      KF      KF      AD
AD      KN      KN      AD
AD      MB      MB      AD
AD      MG      MG      AD
AD      PF      PF      AD
AD      TA      TA      AD
AD      UB      UB      AD
AD      WI      WI      AD

我想做的是加入列 CCCOMPANY=UCCOMPANY && CCCNTY=UCCNTY 并在找不到匹配项时返回空白字段。

我遇到的问题是查询似乎会自行循环,这意味着我得到每个公司 22 个县和每个用户 20 个县,结果是 20x22=>440 个结果,我想要 22 个结果和一个查询。

编辑1:

$sql = "
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
CASE WHEN u_t.UCUSERID='$userid'
THEN  'exists here'
END
) AS UserOnSite
FROM  D.TMTBCNTC as c_t
LEFT JOIN D.TMTBCNTU AS u_t ON u_t.UCCOMPANY = c_t.CCCOMPANY
WHERE c_t.CCCOMPANY =  '$comp_code'";

输出:

    AD | AT |
    AD | BB |
    AD | BE |
    AD | BR |
    AD | CM |
    AD | CO |
    AD | DE |
    AD | EB |
    AD | EP |
    AD | FB |
    AD | GB |
    AD | GU |
    AD | GV |
    AD | HA |
    AD | KF |
    AD | KN |
    AD | MB |
    AD | MG |
    AD | PF |
    AD | TA |
    AD | UB |
    AD | WI |
    AD | AT | exists here
    AD | BB | exists here
    AD | BE | exists here
    AD | BR | exists here
    AD | CM | exists here
    AD | CO | exists here
    AD | DE | exists here
    AD | EB | exists here
    AD | EP | exists here
    AD | FB | exists here
    AD | GB | exists here
    AD | GU | exists here
    AD | GV | exists here
    AD | HA | exists here
    AD | KF | exists here
    AD | KN | exists here
    AD | MB | exists here
    AD | MG | exists here
    AD | PF | exists here
    AD | TA | exists here
    AD | UB | exists here
    AD | WI | exists here

编辑2:

$sql = "
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
    CASE WHEN u_t.UCUSERID='$userid'
    THEN  'exists here'
    END
    ) AS UserOnSite
FROM  D.TMTBCNTC as c_t
LEFT JOIN D.TMTBCNTU 
    AS u_t 
    ON u_t.UCCOMPANY = c_t.CCCOMPANY 
WHERE c_t.CCCOMPANY =  '$comp_code' 
    AND u_t.UCCNTY = c_t.CCCNTY";


    AD | AT |
    AD | BB | exists here
    AD | BB |
    AD | BE | exists here
    AD | BE |
    AD | BR | exists here
    AD | BR |
    AD | CM | exists here
    AD | CM |
    AD | CO | exists here
    AD | CO |
    AD | DE | exists here
    AD | DE |
    AD | EB | exists here
    AD | EB |
    AD | EP | exists here
    AD | EP |
    AD | FB | exists here
    AD | FB |
    AD | GB |
    AD | GU | exists here
    AD | GU |
    AD | GV | exists here
    AD | GV |
    AD | HA | exists here
    AD | HA |
    AD | KF | exists here
    AD | KF |
    AD | KN | exists here
    AD | KN |
    AD | MB | exists here
    AD | MB |
    AD | MG | exists here
    AD | MG |
    AD | PF | exists here
    AD | PF |
    AD | TA | exists here
    AD | TA |
    AD | UB | exists here
    AD | UB |
    AD | WI | exists here
    AD | WI |

最佳答案

试试这个查询:

$sql = "
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
 CASE WHEN u_t.UCUSERID='$userid'
 THEN  'exists here'
 END
) AS UserOnSite
FROM  D.TMTBCNTC as c_t 
LEFT JOIN D.TMTBCNTU AS u_t ON u_t.UCCOMPANY = c_t.CCCOMPANY
WHERE c_t.CCCOMPANY =  '$comp_code'
AND u_t.UCCNTY = c_t.CCCNTY "; // additional where clause

列和表的命名并没有真正使它变得更容易..但这应该会给你你正在寻找的结果

这应该输出如下:

CCCOMPANY CCCNTY UserOnSite
AD       |  AT  | NULL            
AD       |  BB  | exist here
AD       |  BE  | exist here
AD       |  BR  | exist here
AD       |  CM  | exist here
AD       |  CO  | exist here
AD       |  DE  | exist here
AD       |  EB  | exist here
AD       |  EP  | exist here
AD       |  FB  | exist here

第二次更好的尝试:已编辑

$sql = "
SELECT DISTINCT c.CCCOMPANY, c.CCCNTY, (
 SELECT (
  CASE WHEN u.UCUSERID='$userid'
  THEN  'exists here'
  END
 )
 FROM D.TMTBCNTU as u
 WHERE u.UCUSERID =  '$userid'
 AND u.UCCOMPANY = c.CCCOMPANY
 AND u.UCCNTY = c.CCCNTY 
 LIMIT 1
) AS UserOnSite
FROM  D.TMTBCNTC AS c 
WHERE c.CCCOMPANY = '$comp_code'";

这应该会更好

关于Mysql查询,比较表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817357/

相关文章:

php - 过度准备查询

mysql - 将mysql语句组合成3列而不是3行

PHP/MySQL 存储和搜索日期

python - SQLAlchemy:如何正确使用group_by()(only_full_group_by)?

mysql - 如何将完成的多边形点 leaflet.draw 保存到 mysql 表

php - 在 Google App Engine 上使用 Python、PHP 和 HTML 制作应用程序

mysql - 查找字符串是否包含在同一个 mysql 表的列中

mysql - 使 sql 列唯一

mysql - 如何用另一个表更新表但没有公共(public)字段

mysql - 查找具有可互换行的相似条目