доступ сравнить три таблицы

Вы можете сделать что-то вроде

String str = "I am in the EU.";
Matcher matcher = Pattern.compile("\\bEU\\b").matcher(str);
if (matcher.find()) {
   System.out.println("Found word EU");
}
1
задан Lee Mac 11 March 2019 в 17:55
поделиться

2 ответа

Вы выполняете полное перекрестное объединение трех таблиц, поэтому для каждой комбинации строки tbMaster, строки tbCID и строки table3, где три не совпадают в трех столбцах, будет возвращена строка.

Если вы пытаетесь вернуть строку tbMaster, в которой CID, Amount и DatePaid не отображаются ни в tbSUID, ни в table3, вам нужно что-то похожее на ваш первый запрос:

SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.CID
FROM tbMaster 
LEFT JOIN tbSUID ON (tbMaster.CID = tbSUID.CID) AND (tbMaster.Amount = tbSUID.Amount) AND (tbMaster.DatePaid = tbSUID.DatePaid)
LEFT JOIN table3 ON (tbMaster.CID = table3.CID) AND (tbMaster.Amount = table3.Amount) AND (tbMaster.DatePaid = table3.DatePaid)
WHERE ((tbMaster.[Advance/paid])="Paid Respondent") 
AND ((tbCID.CID) Is Null) OR (table3.CID Is Null));

Если запись должен появиться только в одном из tbSUID и table3, заменить последнее «ИЛИ» на «И».

0
ответ дан Don Del Grande 11 March 2019 в 17:55
поделиться

Рассмотрим подзапросы в пунктах NOT EXISTS:

SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID
FROM tbMaster m
WHERE NOT EXISTS
  (SELECT 1 FROM tbCID c
   WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)

OR NOT EXISTS
  (SELECT 1 FROM table3 t
   WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)

Для обратных сравнений рассмотрите возможность добавления запросов объединения с индикатором source_table :

SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID, 
       'tbMaster' AS [source_table]
FROM tbMaster m
WHERE NOT EXISTS
  (SELECT 1 FROM tbCID c
   WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)
OR NOT EXISTS
  (SELECT 1 FROM table3 t
   WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)

UNION ALL

SELECT c.EmployeeID, c.Amount, c.DatePaid, c.[Advance/paid], c.CID, 
       'tbCID' AS [source_table]
FROM tbCID c
WHERE NOT EXISTS
  (SELECT 1 FROM tbMaster m
   WHERE m.CID = c.CID OR m.AMOUNT = c.AMOUNT OR m.DATEPAID = c.DATEPAID)
OR NOT EXISTS
  (SELECT 1 FROM table3 t
   WHERE t.CID = c.CID OR t.AMOUNT = c.AMOUNT OR t.DATEPAID = c.DATEPAID)

UNION ALL

SELECT t.EmployeeID, t.Amount, t.DatePaid, t.[Advance/paid], t.CID, 
       'table3' AS [source_table]
FROM table3 t
WHERE NOT EXISTS
  (SELECT 1 FROM tbMaster m
   WHERE m.CID = t.CID OR m.AMOUNT = t.AMOUNT OR m.DATEPAID = t.DATEPAID)
OR NOT EXISTS
  (SELECT 1 FROM tbCID  c
   WHERE c.CID = t.CID OR c.AMOUNT = t.AMOUNT OR c.DATEPAID = t.DATEPAID)
0
ответ дан Parfait 11 March 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: