我正在为当地的一个教堂建立一个Hamper网站,用于他们的圣诞节篮子驱动器,我正在寻找一些关于如何实现所需MySQL查询/结果的指导。姓名、地址、电话号码......为了得到正确的信息,我写了一个查询,第一个SELECT ... FROM clients
as c JOIN hampers
as h ON ...为了简单起见,(第一个)clients
表如下所示:
| 标识符|hamble_id(索引)默认值为空|姓名|
| - -| - -| - -|
| 一个|2个|约翰·多伊|
| 2个|零值|简·多伊|
| 三个|零值|杰克·多伊|hampers
表如下所示:
| 标识符|客户端标识非空|障碍_no|创建日期|
| - -| - -| - -| - -|
| 一个|一个|第001号|2021年1月1日|
| 2个|一个|C012系列|2022年1月1日|
| 三个|2个|F001系列|2022年1月1日|
所需的查询如下所示。
SELECT h.`id` AS h_id, h.`client_id` AS c_id, IF(YEAR(h.`created_date`)=2022, h.`hamper_no`, NULL) AS hamper_no, YEAR(h.`created_date`) AS h_year, c.`id`, `hamper_id`, `name` FROM `clients` AS c LEFT JOIN `hampers` AS h ON (c.`id` = h.`client_id` AND IF(c.`hamper_id` IS NULL, NULL, c.`hamper_id`) = h.`id`) ORDER BY `name`;
| h_id(_I)|c_标识|障碍_no| h_年|标识符|障碍标识|姓名|
| - -| - -| - -| - -| - -| - -| - -|
| 2个|一个|C012系列|小行星2022|一个|2个|约翰·多伊|
| 零值|零值|零值|零值|2个|零值|简·多伊|
| 零值|零值|零值|零值|三个|零值|杰克·多伊|
当它应该看起来像这样:
| h_id(_I)|c_标识|障碍_no| h_年|标识符|障碍标识|姓名|
| - -| - -| - -| - -| - -| - -| - -|
| 2个|一个|C012系列|小行星2022|一个|2个|约翰·多伊|
| 三个|2个|F001系列|小行星2022| 2个|零值|简·多伊|
| 零值|零值|零值|零值|三个|零值|杰克·多伊|
但是问题是c.hamper_id
可能是NULL(从hampers中分离)。我正在寻找一个类似于上面的结果,其中我可以有一个与最近的hampers/client匹配的不同结果。这将用于多个客户端。
如何在不使用c.hamper_id
或使用条件的情况下,将结果从潜在的多个障碍缩小到每个客户端只有1个障碍?
另一个需要注意的是,这是一个客户端索引,可能没有任何连接障碍......因此,JOIN列最好使用空值。
1条答案
按热度按时间k3fezbri1#
基于https://stackoverflow.com/a/2111420/3095210
这是一个经常出现在StackOverflow上的最大每组n个问题的例子。
| h_id(_I)|c_标识|障碍_no| h_年|标识符|障碍标识|姓名|
| - -| - -| - -| - -| - -| - -| - -|
| 零值|零值|零值|零值|三个|零值|杰克·多伊|
| 三个|2个|F001系列|小行星2022| 2个|零值|"DOE,简"|
| 2个|一个|C012系列|小行星2022|一个|2个|约翰·DOE|