我有一个表包含“客户”信息,另一个表包含每个客户的“付款”信息。
简化的客户端表
client_id | client_name | client_status
----------+----------------+--------------
1 | John St. Peter | In Arrears
2 | Peter St. John | Up-to-date
简化的付款表
payment_id | client_id | payment_date | payment_amount
-----------+-----------+--------------+---------------
1 | 1 | 2017-12-12 | 123.45
2 | 2 | 2017-12-15 | 234.56
3 | 1 | 2017-12-17 | 23.45
4 | 1 | 2017-12-21 | 54.32
5 | 2 | 2017-12-23 | 34.56
对于上述两个表,我想生成一个带有单个查询的表,其中包含所有相关信息以生成一个搜索网格,我可以在其中按两个表中的任何一个列进行过滤,即从“client”表中按“client_status”过滤,或从“payments”表中按“client_id”过滤。
payment_id | client_id | client_name | client_status | payment_date | payment_amount
-----------+-----------+----------------+---------------+--------------+---------------
1 | 1 | John St. Peter | In Arrears | 2017-12-12 | 123.45
2 | 2 | Peter St. John | Up-to-date | 2017-12-15 | 234.56
3 | 1 | John St. Peter | In Arrears | 2017-12-17 | 23.45
4 | 1 | John St. Peter | In Arrears | 2017-12-21 | 54.32
5 | 2 | Peter St. John | Up-to-date | 2017-12-23 | 34.56
所以 - 本质上,我希望在客户表中“重复记录”多次,以方便搜索。我正在使用预制网格工具(DataTables),该工具在整个系统中使用开发人员制作的自定义函数来生成网格(所以我不想弄乱该函数,以免破坏系统的其余部分),因此通过单个查询来获取该数据听起来是更实用的方法。我还为每一行提供了一个“编辑”功能,它将编辑“客户”表,并在“付款”表的编辑屏幕中放置一个选项卡式结构,该结构目前可以很好地处理两个查询(一个用于客户,一位获得该客户所有付款的人)。
我尝试过 UNION 以及各种 JOIN 语句(可能不正确......),但要么出现语法错误,要么每个“客户端”行只有一个结果,这意味着它不会在过滤器中出现。
如果这是一个重复的问题,我深表歉意 - 我已经搜索过,但找不到适合我的答案。
最佳答案
这里是一个连接...
select *
from clientsTable c,
paymentsTable p
where c.client_id = p.client_id
order by p.payment_id;
这应该给你一切。
编辑:对于空的...没有客户的付款...
select *
from clientsTable c,
paymentsTable p
where c.client_id = p.client_id
or p.client_id = null
order by p.payment_id;
关于php - MySQL 从一个表中选择行,并在第二个表中选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995917/