混淆加入 - 全表,加入另一个相应的记录

时间:2014-02-26 10:56:11

标签: php mysql sql join

我有一个问题试图获得我想要的结果集。基本上我有这两个表:

phonemanager_defaults

| id  | tag             | number        |
|-----|-----------------|---------------|
| 1   | MAIN            | 0800 111 1111 |
| 2   | LANDLINE        | 0800 222 2222 |
| 3   | CUSTOMERSERVICE | 0800 333 3333 |

phonemanager_cookie

| number_id  | cookie      | number        |
|------------|-------------|---------------|
| 1          | twitter     | 0800 444 4444 |
| 2          | twitter     | 0800 555 5555 |
| 1          | facebook    | 0800 666 6666 |
| 2          | facebook    | 0800 777 7777 |
| 3          | facebook    | 0800 888 8888 |
| 1          | ppc         | 0800 999 9999 |

我正在PHP中创建一个函数,以便我传递一个cookie作为参数,我希望返回phonemanager_defaults与来自phonemanager_cookie的任何相应记录的所有id课程已加入number_idcookie列,并按我指定的twitter进行过滤。

例如,如果我将cookie指定为Result set (twitter) | id | tag | default_number | cookie | cookie_number | |-----|-----------------|----------------|---------|---------------| | 1 | MAIN | 0800 111 1111 | twitter | 0800 444 4444 | | 2 | LANDLINE | 0800 222 2222 | twitter | 0800 555 5555 | | 3 | CUSTOMERSERVICE | 0800 333 3333 | NULL | NULL | ,则这是我期望的结果集:

ppc

如果我将cookie指定为Result set (ppc) | id | tag | default_number | cookie | cookie_number | |-----|-----------------|----------------|---------|---------------| | 1 | MAIN | 0800 111 1111 | ppc | 0800 999 9999 | | 2 | LANDLINE | 0800 222 2222 | NULL | NULL | | 3 | CUSTOMERSERVICE | 0800 333 3333 | NULL | NULL |

LEFT JOIN

我尝试了很多不同的查询,但似乎无法做到正确。我原以为phonemanager_defaults会有效,但它不会返回SELECT `phonemanager_defaults`.`id` AS `id`, `phonemanager_defaults`.`tag` AS `tag`, `phonemanager_defaults`.`number` AS `default_number`, `phonemanager_cookie`.`cookie` AS `cookie`, `phonemanager_cookie`.`number` AS `cookie_number` FROM `phonemanager_defaults` LEFT JOIN `phonemanager_cookie` ON `phonemanager_defaults`.`id` = `phonemanager_cookie`.`number_id` WHERE `phonemanager_cookie`.`cookie` = 'twitter'; 的所有记录。

这就是我现在所拥有的:

{{1}}

是否有人能够建议一个可以提供我想要的查询? SQL不是我的强项。

1 个答案:

答案 0 :(得分:1)

要从phonemanager_defaults获取所有结果,请将条件从连接WHERE过滤器的ON子句移动到整个结果集上,同时在连接中使用其他条件将从{加入所需的结果{1}}和非匹配行将为您提供null

phonemanager_cookie