[英]Limit Row Display on Left Join with Where Clause
我有一个查询,首先从表案例中选择一行,然后从联接表支付中选择5行。 选择的结果显示5个结果。 我想将其限制为仅显示一个结果,但是仍然从内存中的连接表中选择了所有5个结果。
到目前为止,我的查询如下:
SELECT c.*,
DATE_FORMAT( ADDDATE(c.proposal_date, INTERVAL 30 DAY),'%Y-%m-%d') AS expiration_date_30,
(SELECT name FROM members rp WHERE rp.id = c.resonsible_partner) as responsible_partner,
FROM cases c
LEFT JOIN payments AS inv ON inv.caseid = c.id
WHERE c.id = $id
任何帮助都将受到欢迎!
在这种情况下,样本输出应显示:
表中的案例应在屏幕上显示c.*
: id, casename, proposal_date
该应控制将要显示多少行。
id | casename | proposal_date |
------------------------------
300 | One | 2016-05-05 |
表中的付款应显示: payment_percentage_01 = 25, payment_percentage_02 = 30, payment_number_01 = 1, payment_number_02 = 2
id | caseid | payment_percentage | payment number |
---------------------------------------------------
1 | 300 | 25 | 1 |
2 | 300 | 30 | 2 |
这似乎是一个表格枢纽问题,不确定您是否真的想要这个,但可以尝试一下,也许可以:
SELECT
c.*,
DATE_FORMAT( ADDDATE(c.proposal_date, INTERVAL 30 DAY),'%Y-%m-%d') AS expiration_date_30,
-- (SELECT name FROM members rp WHERE rp.id = c.resonsible_partner) as responsible_partner,
MAX(CASE WHEN p.id = 1 THEN p.payment_percentage END) AS payment_percentage_01,
MAX(CASE WHEN p.id = 2 THEN p.payment_percentage END) AS payment_percentage_02,
MAX(CASE WHEN p.id = 1 THEN p.`payment number` END) AS payment_number_01,
MAX(CASE WHEN p.id = 2 THEN p.`payment number` END) AS payment_number_02
FROM cases c
LEFT JOIN payments p
ON c.id = p.caseid
GROUP BY c.id
编辑:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN p.id = ''',
id,
''' THEN p.payment_percentage END) AS payment_percentage',
id
), ',',
CONCAT(
'MAX(CASE WHEN p.id = ''',
id,
''' THEN p.`payment number` END) AS payment_number',
id
)
) INTO @sql
FROM payments;
SET @sql = CONCAT('
SELECT c.*,
DATE_FORMAT( ADDDATE(c.proposal_date, INTERVAL 30 DAY),''%Y-%m-%d'') AS expiration_date_30, '
, @sql
, ' FROM cases c
LEFT JOIN payments p
ON c.id = p.caseid
GROUP BY c.id;');
-- SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.