MySQL从一个表中选择一行,在第二个表

时间:2017-12-27 16:58:39

标签: php mysql database

我有一个包含“客户”信息的表,另一个包含每个客户的“付款”信息。

简化的客户表

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语句(可能不正确......),但是每个“客户端”行都会出现语法错误或单个结果,这意味着它不会在过滤器中获取。

道歉,如果这是一个重复的问题 - 我已经搜索过,但找不到能够为我解答这个问题的答案。

1 个答案:

答案 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;