我有一个包含“客户”信息的表,另一个包含每个客户的“付款”信息。
简化的客户表
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_status”过滤,或从“付款”表中过滤“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
所以 - 实质上,我希望在clients表中“重复记录”多次,以便支付表中的相应记录,以方便搜索。我正在使用预制的网格工具(DataTables),它在整个系统中使用由开发人员生成的自定义功能来生成网格(所以我不想弄乱这个功能,因为害怕破坏系统的其余部分) ),因此获取该数据的单个查询听起来更像是务实的方法。我还为每一行都有一个“编辑”功能,它将编辑“客户”表,并在“付款”表的编辑屏幕中放置一个选项卡式结构,目前可以正常处理两个查询(一个用于客户端,一个人获得该客户的所有付款。)
我已经尝试了UNION以及各种JOIN语句(可能不正确......),但是每个“客户端”行都会出现语法错误或单个结果,这意味着它不会在过滤器中获取。
道歉,如果这是一个重复的问题 - 我已经搜索过,但找不到能够为我解答这个问题的答案。
答案 0 :(得分:2)
这是一个加入......
select *
from clientsTable c,
paymentsTable p
where c.client_id = p.client_id
order by p.payment_id;
应该给你一切。
编辑:for empties ...没有客户的付款......
select *
from clientsTable c,
paymentsTable p
where c.client_id = p.client_id
or p.client_id = null
order by p.payment_id;