Php SQL:不改变where子句的含糊不清的列解析

Php SQL:不改变where子句的含糊不清的列解析,php,mysql,sql,database,Php,Mysql,Sql,Database,我有以下SQL查询: SELECT call_type FROM INCOMING_CALLS, LIVE_CALLS WHERE LIVE_CALLS.status='INCALL' and INCOMING_CALLS.callerid = LIVE_CALLS.callerid AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-'); 表、LIVE_CALLS和INCOMING_CALLS都有

我有以下SQL查询:

SELECT call_type FROM INCOMING_CALLS, LIVE_CALLS 

WHERE LIVE_CALLS.status='INCALL' and INCOMING_CALLS.callerid = LIVE_CALLS.callerid

AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');
表、LIVE_CALLS和INCOMING_CALLS都有pbl_id列。这显然会导致以下错误:

ERROR 1052 (23000): Column 'pbl_id' in where clause is ambiguous
我理解通过改变来解决这个问题是非常简单的

pbl_id in (

但我不能这样做,因为下面的部分是动态构建的,我无法控制它

AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');

我需要匹配两个表的pbl_id。有什么提示吗?如果您添加以下语句:

INCOMING_CALLS.pbl_id = LIVE_CALLS.pbl_id
然后将其中一个与in语句进行比较

AND INCOMING_CALLS.pbl_id in ('111','190','121','111','-','111','121','303','6730','-');
再想一想,你为什么不加入我们的行列呢

SELECT call_type FROM INCOMING_CALLS
LEFT JOIN LIVE_CALLS ON LIVE_CALLS.pbl_id = INCOMING_CALLS.pbl_id
WHERE LIVE_CALLS.status='INCALL' and INCOMING_CALLS.callerid = LIVE_CALLS.callerid
AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');

您可以使用子查询:

select call_type
from INCOMING_CALLS ic
inner join (select distinct callerid from LIVE_CALLS
            where LIVE_CALLS.status='INCALL') lc
    on ic.callerid = lc.callerid
where 1 = 1
AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');

请看。

动态查询部分是如何构建的?一种返回带有该字符串的变量的方法。顺便问一下,这有关系吗?和传入的呼叫。pbl_id in('111','190','121','111','111','121','303','6730','-');如问题中所述,我无法预先设置传入电话tp pbl_id,因为我无法控制它。谢谢你无法控制它。。。我想知道这在代码中是如何实现的。我刚刚读了你的另一条评论,为什么不在pbl_id上使用str_替换并为表添加前缀呢?这在团队协作时在代码中是可以实现的。谢谢你的帮助。加入表格是解决方案。工作起来很有魅力!谢谢
SELECT call_type FROM INCOMING_CALLS
LEFT JOIN LIVE_CALLS ON LIVE_CALLS.pbl_id = INCOMING_CALLS.pbl_id
WHERE LIVE_CALLS.status='INCALL' and INCOMING_CALLS.callerid = LIVE_CALLS.callerid
AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');
select call_type
from INCOMING_CALLS ic
inner join (select distinct callerid from LIVE_CALLS
            where LIVE_CALLS.status='INCALL') lc
    on ic.callerid = lc.callerid
where 1 = 1
AND pbl_id in ('111','190','121','111','-','111','121','303','6730','-');