gpt4 book ai didi

php - 令人困惑的联接 - 全表,与另一个中的相应记录联接

转载 作者:行者123 更新时间:2023-11-29 00:18:19 26 4
gpt4 key购买 nike

我在尝试获取我想要的结果集时遇到了一些问题。基本上我有这两个表:

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 当然加入了 idnumber_id 列,并由我指定的 cookie 过滤。

例如,如果我将 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';

谁能提出一个查询来满足我的需求? SQL 不是我的强项。

最佳答案

要从 phonemanager_defaults 获取所有结果,请将您的条件从 where 移动到 ON 连接子句 WHERE 过滤器将应用于整个结果集,而在连接中使用附加条件将加入来自 phonemanager_cookie 的所需结果,对于不匹配的行将为您提供 null

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`
AND `phonemanager_cookie`.`cookie` = 'twitter'

关于php - 令人困惑的联接 - 全表,与另一个中的相应记录联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22039192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com