Допоможіть вирішити питання з умовами фільтрації
Дві таблиці worldcoins та worldcoins_coinparameter зв'язок між ними багато до багатьох.
потрібно з таблиці worldcoins вивести всі дані,
а з таблиці worldcoins_coinparameter вивести можливі варіанти але в один рядок і в різні поля.
begin
Prepared;
with SQL do
begin
Clear;
Add(
'SELECT'+
' worldcoins.worldcoins_id'+
.....
', structure.structure_name'+
', material_all.material_name AS material_name_all'+
', metal_all.metal_name AS metal_name_all'+
', sample_all.sample_name AS sample_name_all'+
', wc_cp_all.weight AS weight_all'+
', wc_cp_all.ozt AS ozt_all'+
', material_center.material_name AS material_name_center'+
', metal_center.metal_name AS metal_name_center'+
', sample_center.sample_name AS sample_name_center'+
', wc_cp_center.weight AS weight_center'+
', wc_cp_center.ozt AS ozt_center'+
', material_ring.material_name AS material_name_ring'+
', metal_ring.metal_name AS metal_name_ring'+
', sample_ring.sample_name AS sample_name_ring'+
', wc_cp_ring.weight AS weight_ring'+
', wc_cp_ring.ozt AS ozt_ring'+
.....
' '
);
Add(
'FROM (((((((((('+
'((((((('+// denomination ... structure
'(((( (((( ((('+// worldcoins_coinparameter ... sample(x3)
' worldcoins'+
....
' LEFT JOIN structure ON worldcoins.structure_id=structure.structure_id)'+
' LEFT JOIN worldcoins_coinparameter AS wc_cp_all ON worldcoins.worldcoins_id=wc_cp_all.worldcoins_id)'+
' LEFT JOIN material AS material_all ON wc_cp_all.material_id=material_all.material_id)'+
' LEFT JOIN metal AS metal_all ON wc_cp_all.metal_id=metal_all.metal_id)'+
' LEFT JOIN sample AS sample_all ON wc_cp_all.sample_id=sample_all.sample_id)'+
' LEFT JOIN worldcoins_coinparameter AS wc_cp_center ON worldcoins.worldcoins_id=wc_cp_center.worldcoins_id)'+
' LEFT JOIN material AS material_center ON wc_cp_center.material_id=material_center.material_id)'+
' LEFT JOIN metal AS metal_center ON wc_cp_center.metal_id=metal_center.metal_id)'+
' LEFT JOIN sample AS sample_center ON wc_cp_center.sample_id=sample_center.sample_id)'+
' LEFT JOIN worldcoins_coinparameter AS wc_cp_ring ON worldcoins.worldcoins_id=wc_cp_ring.worldcoins_id)'+
' LEFT JOIN material AS material_ring ON wc_cp_ring.material_id=material_ring.material_id)'+
' LEFT JOIN metal AS metal_ring ON wc_cp_ring.metal_id=metal_ring.metal_id)'+
' LEFT JOIN sample AS sample_ring ON wc_cp_ring.sample_id=sample_ring.sample_id'+
' '+
....
'WHERE'+
' wc_cp_all.coinparameter_id=1 OR'+
' wc_cp_center.coinparameter_id=2 OR'+
' wc_cp_ring.coinparameter_id=3'+
' '
Фільтрувати пробував через умову AND — та при такій умові виводяться не всі дані з таблиці worldcoins
а через умову OR виводяться всі дані + створюються всі можливі варіанти з таблиці worldcoins_coinparameter та виводяться нові рядки.