Ik heb een SQL qeury opgesteld die uit meerdere tabellen data opvraagt en weer samenvoegt tot 1 rij. Nu is deze query super traag > minuut. Hij is opgebouwd uit 4 unions, voor ieder geval 1.
- Persoon met account en met adres
- Persoon met account en zonder adres
- Persoon zonder account en met adres
- Persoon zonder account en zonder adres
Als een persoon geen account of adres heeft is er ook geen relatie meer tussen de persoonstabellen en account/adres tabel...
Mijn SQL ervaring is bepertk te noemen
.
Iemand die wat optimalisatie manieren kent? Ik heb al veel op internet gezocht helaas zonder succes
.
- Persoon met account en met adres
- Persoon met account en zonder adres
- Persoon zonder account en met adres
- Persoon zonder account en zonder adres
Als een persoon geen account of adres heeft is er ook geen relatie meer tussen de persoonstabellen en account/adres tabel...
Mijn SQL ervaring is bepertk te noemen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
| /*************************** Query voor alle relevante persoongegevens **************/
/*************************** Pak alle personen met hun geldige adressen en met meerdere accounts (2 of meer)**************/
SELECT S_CONTACT.ROW_ID,
S_CONTACT.PER_TITLE,
S_CONTACT.FST_NAME,
S_CONTACT.MID_NAME,
S_CONTACT.LAST_NAME,
S_CONTACT.BIRTH_DT,
S_CONTACT.HOME_PH_NUM,
S_CONTACT.CELL_PH_NUM,
S_CONTACT.EMAIL_ADDR,
S_ADDR_PER.ZIPCODE,
S_ADDR_PER.ADDR,
S_ADDR_PER.ADDR_NUM,
S_ADDR_PER.CITY,
S_ORG_EXT_X.ATTRIB_47
FROM S_CONTACT
INNER JOIN S_ADDR_PER ON S_CONTACT.ROW_ID = S_ADDR_PER.PER_ID
INNER JOIN S_PER_ORG_UNIT ON S_CONTACT.ROW_ID = S_PER_ORG_UNIT.PER_ID
INNER JOIN S_ORG_EXT_X ON S_PER_ORG_UNIT.OU_ID = S_ORG_EXT_X.ROW_ID
WHERE LAST_NAME LIKE '%bOer%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
OR FST_NAME LIKE '%arJan%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
ORDER BY S_CONTACT.ROW_ID
/*************************** Pak alle personen zonder een adres en met meerdere accounts (2 of meer)**************/
UNION
SELECT S_CONTACT.ROW_ID,
S_CONTACT.PER_TITLE,
S_CONTACT.FST_NAME,
S_CONTACT.MID_NAME,
S_CONTACT.LAST_NAME,
S_CONTACT.BIRTH_DT,
S_CONTACT.HOME_PH_NUM,
S_CONTACT.CELL_PH_NUM,
S_CONTACT.EMAIL_ADDR,
'onbekend',
'onbekend',
'onbekend',
'onbekend',
S_ORG_EXT_X.ATTRIB_47
FROM S_CONTACT
INNER JOIN S_PER_ORG_UNIT ON S_CONTACT.ROW_ID = S_PER_ORG_UNIT.PER_ID
INNER JOIN S_ORG_EXT_X ON S_PER_ORG_UNIT.OU_ID = S_ORG_EXT_X.ROW_ID
WHERE S_CONTACT.PR_PER_ADDR_ID IS NULL AND LAST_NAME LIKE '%bOer%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
OR S_CONTACT.PR_PER_ADDR_ID IS NULL AND FST_NAME LIKE '%arJan%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
/*************************** Pak alle personen zonder een adres en zonder een account **************/
UNION
SELECT S_CONTACT.ROW_ID,
S_CONTACT.PER_TITLE,
S_CONTACT.FST_NAME,
S_CONTACT.MID_NAME,
S_CONTACT.LAST_NAME,
S_CONTACT.BIRTH_DT,
S_CONTACT.HOME_PH_NUM,
S_CONTACT.CELL_PH_NUM,
S_CONTACT.EMAIL_ADDR,
'onbekend',
'onbekend',
'onbekend',
'onbekend',
'Geen'
FROM S_CONTACT
WHERE (LAST_NAME LIKE '%bOer%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
OR FST_NAME LIKE '%arJan%'
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900'))
AND NOT EXISTS
(SELECT PER_ID
FROM S_PER_ORG_UNIT
WHERE S_CONTACT.ROW_ID = S_PER_ORG_UNIT.PER_ID)
/*************************** Pak alle personen met geldige adres en zonder een account **************/
UNION
SELECT S_CONTACT.ROW_ID,
S_CONTACT.PER_TITLE,
S_CONTACT.FST_NAME,
S_CONTACT.MID_NAME,
S_CONTACT.LAST_NAME,
S_CONTACT.BIRTH_DT,
S_CONTACT.HOME_PH_NUM,
S_CONTACT.CELL_PH_NUM,
S_CONTACT.EMAIL_ADDR,
S_ADDR_PER.ZIPCODE,
S_ADDR_PER.ADDR,
S_ADDR_PER.ADDR_NUM,
S_ADDR_PER.CITY,
'Geen'
FROM S_CONTACT
INNER JOIN S_ADDR_PER ON S_CONTACT.ROW_ID = S_ADDR_PER.PER_ID
WHERE (LAST_NAME LIKE '%bOer%' OR FST_NAME LIKE '%arJan%')
AND (BIRTH_DT = '12-29-1981' OR BIRTH_DT = '1-1-1900')
AND NOT EXISTS
(SELECT PER_ID
FROM S_PER_ORG_UNIT
WHERE S_CONTACT.ROW_ID = S_PER_ORG_UNIT.PER_ID) |
Iemand die wat optimalisatie manieren kent? Ik heb al veel op internet gezocht helaas zonder succes
Uw SAP specialist