1

これは、このPHP mysqlLEFTJOIN出力からの続きです。

2番目のデータベース(Cu.data)に変更を加えました。データベーステーブルは次のようになります。

mysql> desc ins.data;
+-------------------+------------------+------+-----+---------------------+----------------+
| Field             | Type             | Null | Key | Default             | Extra          |
+-------------------+------------------+------+-----+---------------------+----------------+
| ID                | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| Date              | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| Number            | text             | NO   |     | NULL                |                |
| Text              | text             | NO   |     | NULL                |                |
| Email             | text             | NO   |     | NULL                |                |
| TargetID          | varchar(20)      | NO   |     | NULL                |                |
| CSW               | text             | NO   |     | NULL                |                |
| TSW               | text             | NO   |     | NULL                |                |
| Key               | text             | NO   |     | NULL                |                |
| CType             | text             | NO   |     | NULL                |                |
+-------------------+------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)

mysql> desc Cu.data;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| Title    | decimal(15,0) | NO   |     | NULL    |       |
| Cu       | varchar(45)   | NO   |     | NULL    |       |
| Co       | varchar(25)   | NO   |     | NULL    |       |
| Ci       | varchar(25)   | NO   |     | NULL    |       |
| SID      | int(12)       | NO   |     | NULL    |       |
| TargetID | varchar(20)   | NO   | MUL | NULL    |       |
| SType    | varchar(12)   | NO   |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

私のクエリは次のようになります。

mysql> SELECT ins.data.Date,  ins.data.Number,  
ins.data.Email, ins.data.TargetD, ins.data.CSW, 
ins.data.TSW, ins.data.CType, Cu.data.Cu, 
Cu.data.SID, Cu.data.Co,
Cu.data.Ci, Cu.data.SType 
FROM ins.data 
LEFT JOIN  
Cu.data ON (ins.data.TargetID = Cu.data.TargetID);

そして、出力にはins.data(最初のデータベース)からの必要なすべての値が表示されますが、Cu.dataからのすべての値は「NULL」です

TargetIDは、データベース間の「リンク」です。すなわち。TargetIDを使用すると、データベース間でデータをマッピングできます。

ins.dataのデータは、人々がそれにデータを挿入するときにゆっくりと増加しています。Cu.dataは静的であり、おそらく年に1回更新されます。

PHPが機能することはなかったので、bashプログラミングスキルを活用することにしました。cronスクリプトを介して、データベースからフェッチされたデータを含む電子メールを送信します。スクリプトは完全に機能しますが、一部のデータが欠落しています。

そして今、質問です。いったいなぜ私のSQL句はins.dataからのみデータを出力するのですか!?

4

1 に答える 1

1

結合条件の問題を調査する場合、最初に確認するのは、列が相互に互換性があるかどうか(つまり、同じタイプとストレージサイズ)です。

テキスト列の場合、スペースや印刷できない文字に問題があり、簡単に見つけられない場合もあります。

于 2012-08-13T11:05:39.647 に答える