0

さまざまな通話の詳細をテーブルに入力する次の SQL クエリがあります。

INSERT tblCalls (callerID, destinationNum)
SELECT tblCallerID.callerID, tblSkyNums.skyID
FROM tblCallerID, tblSkyNums
WHERE tblCallerID.callerNumber = '".$caller_id."'
AND tblSkyNums.skyNum = '".$dest_no."'

このクエリは、2 つの別々のテーブルから callerID と skyID を取得し、それらを 3 番目のテーブルに挿入します。tblCalls。

私の問題は、入力された番号の skyID が存在しない場合があり、これが発生した場合、tblCalls には何も入力されません。つまり、この通話のデータは記録されません。

私がやろうとしているのは、そのような skyID が存在しない場合は、その特定の通話の skyID フィールドに「n/a」と入力するだけです。

私はこれを2日以上行っていますが、それを機能させる方法を見つけることができないようです. どんな助けでも大歓迎です。

4

1 に答える 1

1

Coalesce では、途中までしか到達できません。問題は、FROM 句の「,」が INNER JOIN を実行するため、tblSkyNums で行が選択されていない場合、SELECT クエリから行が返されないことです。

これを修正するには、OUTER JOIN が必要です。

INSERT INTO tblCalls (callerID, destinationNum)
SELECT DISTINCT tblCallerID.callerID, COALESCE(tblSkyNums.skyID, 'N/A')  AS skyID
  FROM tblCallerID
  LEFT OUTER JOIN tblSkyNums
    ON tblSkyNums.skyNum = '".$dest_no."'
 WHERE tblCallerID.callerNumber = '".$caller_id."'

お役に立てれば!

ジョン...

于 2012-11-03T16:12:12.263 に答える