98 lines
2.7 KiB
SQL
98 lines
2.7 KiB
SQL
-- ****************************************************************
|
|
-- * SQL-Statements to check integrity of the database stock data *
|
|
-- ****************************************************************
|
|
|
|
|
|
-- Compare count(ati.ati_serialno) with stkat.stkat_itemquantity
|
|
SELECT
|
|
ati.at_id,
|
|
ati.stk_id,
|
|
count(ati.ati_serialno) AS num,
|
|
stkat.stkat_quantity,
|
|
stkat.stkat_itemquantity,
|
|
at.at_name,
|
|
stk.stk_name,
|
|
stk.stk_path
|
|
FROM
|
|
articleitem AS ati,
|
|
stockarticle AS stkat,
|
|
article AS at,
|
|
stock AS stk
|
|
WHERE
|
|
ati.at_id = stkat.at_id AND
|
|
ati.stk_id = stkat.stk_id AND
|
|
at.at_id = stkat.at_id AND
|
|
at.at_serialno = '1' AND
|
|
stk.stk_id = stkat.stk_id
|
|
GROUP BY ati.at_id, ati.stk_id
|
|
HAVING (num != stkat.stkat_itemquantity)
|
|
ORDER BY stk.stk_id, at.at_id
|
|
LIMIT 0,1000
|
|
|
|
|
|
-- Get all rows in "articleitem" not existing in "stockarticle"
|
|
-- That is the special case from above where "stkat.stkat_itemquantity = 0",
|
|
-- because if it is "0" it will be removed in stockarticle.
|
|
-- Therefore these rows are not in the portfolio from the statement above
|
|
SELECT
|
|
stk.stk_name,
|
|
stk.stk_path,
|
|
ati.stk_id,
|
|
ati.at_id,
|
|
ati.ati_serialno,
|
|
at.at_name
|
|
FROM
|
|
articleitem AS ati,
|
|
article AS at,
|
|
stock AS stk
|
|
WHERE
|
|
ati.stk_id = stk.stk_id AND
|
|
ati.at_id = at.at_id AND
|
|
at.at_serialno = '1' AND
|
|
CONCAT(ati.at_id,'_',ati.stk_id) NOT IN (SELECT CONCAT(at_id,'_',stk_id) FROM stockarticle)
|
|
ORDER BY stk.stk_path
|
|
LIMIT 0,1000
|
|
|
|
|
|
-- The same statement like before but output is a preparation for insert statements in "stockarticle"
|
|
SELECT
|
|
CONCAT('INSERT INTO stockarticle (stk_id, at_id, stkat_maxquantity, stkat_quantity, stkat_itemquantity, stkat_modifytime) VALUES (',ati.stk_id,',',ati.at_id,',0,',COUNT(*),',',COUNT(*),',0000-00-00 00:00:00);')
|
|
FROM
|
|
articleitem AS ati,
|
|
article AS at,
|
|
stock AS stk
|
|
WHERE
|
|
ati.stk_id = stk.stk_id AND
|
|
ati.at_id = at.at_id AND
|
|
at.at_serialno = '1' AND
|
|
CONCAT(ati.at_id,'_',ati.stk_id) NOT IN (SELECT CONCAT(at_id,'_',stk_id) FROM stockarticle)
|
|
GROUP BY ati.stk_id,ati.at_id
|
|
LIMIT 0,1000
|
|
|
|
|
|
|
|
-- Check for multiple entries with the same serial number
|
|
-- ACHTUNG: ABFRAGEZEIT KRITISCH !!!
|
|
SELECT
|
|
ati.at_id,
|
|
ati.stk_id,
|
|
ati.ati_serialno,
|
|
at.at_name,
|
|
stk.stk_name
|
|
FROM
|
|
articleitem AS ati,
|
|
article AS at,
|
|
stock AS stk
|
|
WHERE
|
|
at.at_id = ati.at_id AND
|
|
stk.stk_id = ati.stk_id AND
|
|
ati.ati_serialno IN (
|
|
SELECT
|
|
ati2.ati_serialno
|
|
FROM
|
|
articleitem AS ati2
|
|
GROUP BY ati2.ati_serialno
|
|
HAVING count(ati2.ati_serialno) > 1
|
|
)
|
|
ORDER BY ati.ati_serialno
|
|
LIMIT 0,1000 |