我有 3 个表 members fees 和 tblinvoice 他们都有一个 memberid 因此,如果有人支付数据,则数据会转到费用中,并且在费用表中创建 tblinvoice 和 invoiceid,并将 tblinvoice 和 memberid 插入这两个表中,两个人知道哪个成员支付了费用。 现在,当创建发票时,只有 tblinvoice 收到数据,但仍然带有 memberid。
现在我想从 3 个表中提取数据,但这两个表的费用和 tblinvoice 数据将基于 tblinvoice 的日期范围,即 invoicedate 以及来自 fees fees.paiddate 的 tblinvoice 日期。
现在如果表费用中有数据,如果没有从 tblinvoice 中提取任何数据,或者如果两者都从两者中提取。
此处的目的是提取付款和发票金额的报表。我想知道我是否解释得很好这是我在下面尝试使用 mysql 的方法。
select
members.memberid,
fees.feesid,
members.usercode,
members.title,
members.name,
members.surname,
members.address,
members.city,
members.cell,
fees.recieved_by,
fees.paidfor,
fees.fromdate,
fees.amountpaid AS amountpaidMe,
fees.feestype,
fees.qty,
fees.paiddate,
fees.unitPrice,
fees.todate,
fees.invoiceid,
tblinvoice.amount AS invoicedAmount,
tblinvoice.invoicedate
FROM members
INNER JOIN fees ON fees.memberid = members.memberid
LEFT OUTER JOIN tblinvoice ON tblinvoice.memberid = fees.memberid
WHERE members.memberid ='62396'
&& tblinvoice.invoicedate BETWEEN '2023-01-01' AND '2023-03-05' OR fees.paiddate BETWEEN '2023-01-01' AND '2023-03-05'
我被要求共享三个表中的所有数据,下面是数据。 但是,如果我尝试使用日期范围进行查询,它就会出错 我想从基于支付日期范围的费用表中获取所有数据,并且基于发票日期范围从发票表中获取所有数据是一个表没有数据只是将该行变黑然后在另一个表中提取数据
查询会员 从 memberid = '62396' 的成员中选择名称 结果 姓名 阿卜杜拉·本·萨拉姆
Query fees table
SELECT `amountpaid` , `paiddate` , `memberid` FROM `fees` WHERE memberid = '62396'
results
Full texts amountpaid paiddate memberid
Edit Edit Copy Copy Delete Delete 1300.00 2022-08-18 11:44:44 62396
Edit Edit Copy Copy Delete Delete 1300.00 2022-09-13 03:56:50 62396
Edit Edit Copy Copy Delete Delete 650.00 2022-11-15 04:12:34 62396
Edit Edit Copy Copy Delete Delete 1500.00 2022-12-07 09:37:13 62396
Edit Edit Copy Copy Delete Delete 1300.00 2023-01-13 06:00:58 62396
Edit Edit Copy Copy Delete Delete 1300.00 2023-01-24 05:55:11 62396
Edit Edit Copy Copy Delete Delete 1300.00 2023-02-03 08:36:36 62396
Edit Edit Copy Copy Delete Delete 1300.00 2023-02-21 08:38:53 62396
Query tbl invoice table
SELECT `amount`, `memberid`, `invoicedate` FROM `tblinvoice` WHERE memberid = '62396'
results
Full texts amount memberid invoicedate
Edit Edit Copy Copy Delete Delete 340.00 62396 2023-03-01 18:27:18
Edit Edit Copy Copy Delete Delete 89.00 62396 2023-03-01 18:28:41
Edit Edit Copy Copy Delete Delete 88.00 62396 2023-03-01 18:28:41
Edit Edit Copy Copy Delete Delete 21.00 62396 2023-03-02 09:22:01
Edit Edit Copy Copy Delete Delete 55.00 62396 2023-03-02 09:22:01
Edit Edit Copy Copy Delete Delete 890.00 62396 2023-03-02 11:51:27
与其尝试在最后的 where 子句中限制来自费用或发票的行,不如尝试将日期范围包含在连接条件中。例如
SELECT
members.memberid
, fees.feesid
, members.usercode
, members.title
, members.name
, members.surname
, members.address
, members.city
, members.cell
, fees.recieved_by
, fees.paidfor
, fees.fromdate
, fees.amountpaid AS amountpaidMe
, fees.feestype
, fees.qty
, fees.paiddate
, fees.unitPrice
, fees.todate
, fees.invoiceid
, tblinvoice.amount AS invoicedAmount
, tblinvoice.invoicedate
FROM members
INNER JOIN fees ON fees.memberid = members.memberid
AND fees.paiddate BETWEEN '2023-01-01' AND '2023-03-05'
LEFT OUTER JOIN tblinvoice ON tblinvoice.memberid = fees.memberid
AND tblinvoice.invoicedate BETWEEN '2023-01-01' AND '2023-03-05'
WHERE members.memberid = '62396'
注意,如果您有一个左连接表,那么在 where 子句中使用该表中的列可以导致内部连接的效果,除非明确允许由于不匹配的行而导致的 NULL。通过将日期范围过滤器移动到连接中,您可以避免这种增加的复杂性。