MySQL如何对apt和book表执行多条件联合关联查询
SQL查询实现方案修正
原SQL存在的问题
- UNION上下查询字段数量不匹配:上层仅返回apt表的4个字段,下层返回apt+book的所有字段,语法错误无法执行
- 字段名拼写错误:apt表状态字段为
status,原SQL误写为sts,无法匹配过滤条件 - 输出字段不符合需求:未按要求返回指定字段,返回了大量冗余字段
- 存在SQL注入风险:直接拼接会话变量到SQL语句中,无安全防护
正确实现方案
按需求输出conv_id、unique_id、apt_name、apt_data、status、conv_status字段的正确SQL如下,建议配合预处理语句使用:
-- 条件①:apt表status为Active的账户,无关联book数据的字段补NULL占位 SELECT NULL AS conv_id, unique_id, apt_name, apt_data, status, NULL AS conv_status FROM apt WHERE status = 'Active' UNION -- 如需保留两个条件都命中的重复账户,可替换为UNION ALL提升性能 -- 条件②:book表匹配规则的关联apt账户 SELECT b.conv_id, a.unique_id, a.apt_name, a.apt_data, a.status, b.conv_status FROM book b INNER JOIN apt a ON b.apt_uniqueid = a.unique_id WHERE b.conv_status = 'invalid' AND b.user_uniqueid = ? AND b.conv_data = '1' ORDER BY unique_id DESC
调用时将?占位符绑定$_SESSION['unique_id']参数即可,不要直接拼接变量到SQL语句中。
内容的提问来源于stack exchange,提问作者AZIS SOFYAN PRASETYO
相关产品推荐
相关产品推荐

