1

クエリを実行しようとしている 2 つのテーブルがあり、必要な情報の約半分しか取得できません。2 つのテーブルは次のとおりです。

client_skills_new:

+----+-----------+------------+----------+-------------+
| id | client_id | job_sector | job_type | job_name    |
+----+-----------+------------+----------+-------------+
| 79 | 24        | 3          | 39       | Accountant  |
+----+-----------+------------+----------+-------------+
| 80 | 25        | 3          | 115      | Broker      |
+----+-----------+------------+----------+-------------+
| 81 | 24        | 5          | 241      | Shop Worker |
+----+-----------+------------+----------+-------------+

ジョブ_セクター:

+-----+--------------------------+---------------+
| id  | name                     | job_sector_id |
+-----+--------------------------+---------------+
| 3   | Accounting & Finance     | 0             |
+-----+--------------------------+---------------+
| 115 | Brokerage                | 3             |
+-----+--------------------------+---------------+
| 22  | Sales & Retail           | 0             |
+-----+--------------------------+---------------+

職種テーブルには、実際には職種と職種が 1 つの列 (名前) に含まれています。job_sector id は 2 つをリンクします (つまり、仲介は経理と財務の小見出しです - job_sector_id = id)。

client_skills_new テーブルで、job_sector および job_type に格納されている数値は、job_sectors の id 列に関連しています。私がやろうとしているのは、この 2 つを結合して、client_skills_new の job_sector および job_type 整数に関連する job_sectors テーブルのテキスト値を取得するクエリを作成することです。

これまでのところ、次のようなクエリがあります。

SELECT client_skills_new.job_sector, job_sectors.id, job_sectors.name 
FROM job_sectors
LEFT JOIN client_skills_new 
ON client_skills_new.job_sector = job_sectors.id
WHERE client_id='$client_id';

これから、次のような結果が得られます。

+------------+----+--------------------------+
| job_sector | id | name                     |
+------------+----+--------------------------+
| 3          | 3  | Accounting & Finance     |
+------------+----+--------------------------+
| 22         | 22 | Sales & Retail           |
+------------+----+--------------------------+

一番上のテーブルから 24 という id を指定すると、必要なものの約半分が得られます。job_type に対応するテキスト名もクエリに含めたいと思います。クエリを完了するために何を追加する必要があるのか​​ よくわかりません。2 回目の左結合を試みましたが、エラーが発生し続けました。

client_skills_new の各 ID を指定して、探している出力は次のとおりです。

+----+--------------------------+-----------+----------+
| id | job_sector               | job_type  | job_name |
+----+--------------------------+-----------+----------+
| 80 | Accounting & Finance     | Brokerage | Broker   |
+----+--------------------------+-----------+----------+
4

2 に答える 2

1

はい、2 つの結合が必要ですLEFTが、その逆です。

SELECT c.id, 
       js.name AS job_sector, 
       jt.name AS job_type,
       c.job_name  
FROM client_skills_new AS c
  LEFT JOIN job_sectors AS js
    ON c.job_sector = js.id
  LEFT JOIN job_sectors AS jt
    ON c.job_type = jt.id
WHERE c.client_id='$client_id' ;
于 2013-06-27T15:56:34.007 に答える
0

問題はwhere条文です。left outer join一致がない場合、1 つのテーブルの値が NULL になるため、これは を「元に戻す」ことになります。

修正は、ロジックをon句に移動することです。

SELECT client_skills_new.job_sector, job_sectors.id, job_sectors.name
FROM job_sectors LEFT JOIN
     client_skills_new
     ON client_skills_new.job_sector = job_sectors.id and
        client_id='$client_id';
于 2013-06-27T15:18:45.193 に答える