Błąd zapytania : SubQuery must be Correlated

0

Cześć,

Mam zapytanie, które wykonuje mi się na MS-SQL'u ale próba odtworzenia go na Hive skutkuje błędęm... Próbowałem już wszelakich połączeń z id_d i ciągle dostaję błąd

Invalid SubQuery expression 'd_id': For Exists/Not Exists operator SubQuery must be Correlated.

	SELECT * 
	FROM tabC c
	INNER JOIN  tabU u ON u.userid = c.user_id
	WHERE EXISTS (
			SELECT 1
			FROM tabD 
			WHERE id_d IN (
					SELECT id_e
					FROM tabE
					WHERE id_fk = c.user_id
					)
				AND id_d = 99
			)

Z góry dzięki za jakąkolwiek pomoc

0

Nie znam Hive ale pewnie mu chodzi o to, że pierwsze subquery nie jest skorelowane z głównym zapytaniem.

0

albo źle Cię zrozumiałem, albo dalej coś nie tak:

Było tak:

SELECT * 
	FROM tabC c
	INNER JOIN  tabU u ON u.userid = c.user_id
	WHERE EXISTS (
			SELECT 1
			FROM tabD d
			WHERE d.id_d IN (
					SELECT e.id_e
					FROM tabE
					WHERE e.id_fk = c.user_id
					)
				AND d.id_d = 99
			)

a zrobiłem tak:

SELECT * 
FROM tabC c		
INNER JOIN tabU u ON u.userid = c.user_id
	WHERE EXISTS (
			SELECT 1
			FROM tabD d
		    join  (
					SELECT e.id_e
					FROM tabE
					WHERE e.id_fk = c.user_id
					) x 
				on x.FK_idTag = d.id
				where id = 99
			)

W dalszym ciągu ten sam błąd :( 
2

Wg mnie ten c.user_id jest za głęboko. Dwa poziomy w dół może nie widzieć.

0
Marcin.Miga napisał(a):

Wg mnie ten c.user_id jest za głęboko. Dwa poziomy w dół może nie widzieć.

SELECT * 
    FROM tabC c
    INNER JOIN  tabU u ON u.userid = c.user_id
    WHERE EXISTS (
            SELECT 1
            FROM tabD d
            WHERE d.id_d IN (
                    SELECT e.id_e
                    FROM tabE
                    JOIN tabC on  e.id_fk = c.user_id
                    )
                AND d.id_d = 99
            )

i zapytanie się wykonuje, ale niestety w takim przypadku nie otrzymuję żadnych wyników. Usuwając ten warunek WHERE zapytanie się wymiela, ale przecież to wpływa na całą logikę... Taki sam efekt jak usunięcie where'a osiągam kiedy próbuję zrobić powyższego joina. A więc tkwię dalej jak ten warunek e.id_fk = c.user_id przenieść na hql'a :(

2

A jak pozbędziesz się where tylko użyjesz joinów do filtrowania:

SELECT c.* ,u.*
    FROM tabC c
    INNER JOIN  tabU u ON u.userid = c.user_id
	inner join tabE E on e.id_fk = c.user_id
	inner join tabD D on D.id_d = e.id_e AND d.id_d = 99

Trzeba by przetestować czy dobrze rozczytałem Twoje zapytanie....

1

Mógłbyś rozwinąć co ma pobierać to zapytanie?
Być może da się to zrobić w inny, prostszy sposób. Nazewnictwo tabel nie pomaga w zrozumieniu kontekstu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1