0

私は次の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 (

INCOMING_CALLS.pbl_id in (

INCOMING_CALLS.pbl_id in (

しかし、以下の部分は動的に動的に構築されており、私はそれを制御できないため、それを行うことはできません。

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

両方のテーブルのpbl_idを一致させる必要があります。どうすればそれを達成できるかについてのヒントはありますか?

4

2 に答える 2

1

サブクエリを使用できます。

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','-');

こちらをご覧ください

于 2012-12-12T10:25:39.650 に答える
0

ステートメントを追加する場合:

INCOMING_CALLS.pbl_id = LIVE_CALLS.pbl_id

次に、2つのうちの1つを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','-');
于 2012-12-12T10:23:16.783 に答える