sql - How to get one row to always display (using one view) -


i have following (much simplified) view:

select        t1.item, t2.text            t1 left outer join                          t2 on t1.code = t2.code , t1.item = t2.item        (t1.item = '12345') , (t1.code = '678') , (t2.detailid = '99') 

t1

╔═══════╦═══════╦═══════════════╗ ║ code  ║ item  ║ other info... ║ ╠═══════╬═══════╬═══════════════╣ ║ code1 ║ item1 ║ other info... ║ ║ code2 ║ item2 ║ other info... ║ ╚═══════╩═══════╩═══════════════╝ 

t2

╔═══════╦═══════╦═══════════╦═══════╦═══════════════╗ ║ code  ║ item  ║ detailid  ║ text  ║  other info   ║ ╠═══════╬═══════╬═══════════╬═══════╬═══════════════╣ ║ code1 ║ item1 ║ detailid1 ║ text1 ║ other info... ║ ║ code1 ║ item1 ║ detailid2 ║ text2 ║ other info... ║ ║ code1 ║ item1 ║ detailid3 ║ text3 ║ other info... ║ ║ code2 ║ item2 ║ detailid1 ║ text4 ║ other info... ║ ╚═══════╩═══════╩═══════════╩═══════╩═══════════════╝ 

nb: detailid reused on multiple codes/items

in instances works fine. except on occasions, detailid 99 not exist code , item. when happens, returns 0 rows (i thought left outer join fix sql amateurish). how can return row, just

12345, '' 

as result in instance?

you need move condition on second table on clause:

select t1.item, t2.text t1 left outer join      t2      on t1.code = t2.code , t1.item = t2.item , t2.detailid = '99' (t1.item = '12345') , (t1.code = '678') ; 

when there no match, value null , original where clause filters out.


Comments