Heim > Fragen und Antworten > Hauptteil
Ich habe 3 Tabellen: training_schedules, training_discounts und agenten. Trainingspläne: ID, Name, Agent_ID, Preis. Trainingsrabatte: ID, Agenten-ID, Zeitplan-ID, Rabatt. Agent: ID, Name
Ich habe versucht, den Preis von der Tabelle „training_schedules“ zu subtrahieren, indem ich die Spalte „discounts“ in der Tabelle „training_discounts“ wie folgt verwendet habe:
SELECT ts.id, name, training_types, DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start,
DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end, quota, price, td.discount,
CASE price WHEN td.agent_id = 2 THEN (price - td.discount) ELSE price END as total
FROM training_schedules ts
LEFT JOIN training_discounts td on ts.id = td.schedule_id GROUP BY td.schedule_id;
Aber nein, selbst wenn die agent_id dieselbe ist, ist der Preis der gesamten Spalte immer noch derselbe wie zuvor. Was könnte an meiner Anfrage falsch sein? Hier ist die SQLfiddle, falls Sie sie brauchen: http://sqlfiddle.com/#!9/0cd42d/1/0
P粉1119279622024-04-06 00:04:01
您不需要使用group by
,因为您没有使用任何聚合函数。
SELECT ts.id , name , training_types , DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start , DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end , quota, price , td.discount , CASE WHEN td.agent_id = 2 THEN price - td.discount ELSE price END as total FROM training_schedules ts LEFT JOIN training_discounts td on ts.id = td.schedule_id;
您还错误地使用了select case
。另一种选择是使用 mysql if()
函数。
if(agent_id = 2, price - td.discount, price) as total