От SQLite до Oracle 0 появляются записи - PullRequest
0 голосов
/ 08 февраля 2019

Привет всем, у меня есть запрос ниже, который я написал, когда я использовал SQLite:

SELECT 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar 
FROM 
    allData ad 
INNER JOIN 
    users u 
ON 
    u.fTag = ad.lastUserWhoUpdated 
GROUP BY 
    ad.ID 
ORDER BY 
    ad.ID ASC

Это производит 6 записей, которые, я думаю, дадут этот запрос.

ОднакоС тех пор я перешел на использование базы данных Oracle.Это моя информация о сервере Oracle, который я использую:

Oracle Database 12c Enterprise Edition, выпуск 12.2.0.1.0 - 64-битное производство

Поэтому, когда я конвертирую SQLiteотправьте данные в Oracle и выполните тот же запрос, просто изменив для GROUP BY , поскольку кажется, что Oracle хочет получить все имена, которые есть в операторе SELECT, а не только то, которое мне нужно сгруппировать по:

SELECT 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar 
FROM 
    allData ad 
INNER JOIN 
    users u 
ON 
    u.fTag = ad.lastUserWhoUpdated 
GROUP BY 
    ad.ID,ad.Script_Name,ad.Current_Status,ad.Issues_found_during_run,ad.Testers,ad.Run_Date,ad.Tools,u.fTag,u.role,u.avatar 
ORDER BY 
    ad.ID ASC;

Это выше дает 0 записей при запуске в SQL Developer.Итак, что мне нужно было бы сделать Oracle, чтобы исправить это, чтобы он извлек 6 записей, как и версия SQLite?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Это не имеет смысла (по крайней мере для меня).Нет условия WHERE, которое ограничивало бы количество возвращаемых строк.GROUP BY определенно не имеет к этому никакого отношения.Единственная подозрительная вещь - это

on u.fTag = ad.lastUserWhoUpdated

, из-за которой не удалось получить строки.

Следовательно:

  • Вы уверены, что в этих двух таблицах есть совпадающие значения?
  • проверить типы данных этих двух столбцов, особенно если один (или оба) имеют значение CHAR (я имею в виду CHAR , а не VARCHAR2), значения которых на правой клавише имеют пусто до полного размера столбца, так что вы можете попробовать с

    on trim(u.fTag) = trim(ad.lastUserWhoUpdated)
    

    , который имеет свои недостатки (индекс не будет использоваться, если он не основан на функции), так что - еслиполучается, что это так, измените тип данных на VARCHAR2.

0 голосов
/ 08 февраля 2019

Вы можете использовать что-то вроде этого:

SELECT 
ad.ID,MAX(ad.Script_Name), MAX(ad.Current_Status),
MAX(ad.Issues_found_during_run), MAX(ad.Testers),
MAX(ad.Run_Date), MAX(ad.Tools), MAX(u.fTag),MAX(u.role),MAX(u.avatar) 
FROM 
 allData ad 
INNER JOIN 
 users u 
ON 
 u.fTag = ad.lastUserWhoUpdated 
GROUP BY 
ad.ID
ORDER BY 
ad.ID ASC;

Подробнее о функциях Aggregrate здесь:

https://docs.oracle.com/database/121/SQLRF/functions003.htm

...