Question

Je voudrais savoir comment cette requête serait écrite si aucun joint ont été utilisés. J'essaie de le comprendre pour les cas où se rejoignent ne sont pas viables ou ne peuvent pas être utilisés (ne sont pas disponibles).

SELECT
    *
FROM
(
    table1
INNER JOIN
    table2
ON
    table1.id = table2.id
)
INNER JOIN
    table3
ON
(
    table1.id2 = table3.id2
)
AND
(
    table1.id3 = table3.id3
)
WHERE
    table1.id = 1

La raison pour laquelle je ne peux pas avoir recours aux jointures est parce que l'application utilise HQL par opposition à SQL standard et HQL rend incroyablement difficile à rejoint le faire.

Était-ce utile?

La solution

Il est impossible d'extraire des données de deux tables différentes, sans se joindre à eux d'une manière ou d'une autre. Vous utilisez une JOIN mais vous pouvez obtenir la même chose en le plaçant dans la clause where par exemple:

SELECT * FROM table1, table2 WHERE table1.id = table2.id AND ...

Autres conseils

Vous pouvez faire les sélections sont séparés, et les joints dans l'application.

Si les jointures sont hors limites, puis rester à l'écart des bases de données SQL.

souvent une sous-requête peut être plus facile que une jointure si seulement sélectionner 1 valeur

SELECT e.Name, e.HireDate, (select SUM(CheckAmount) from EmployeeCheck where EmployeeID = e.ID) 
FROM Employee e

Ne pas être pureist mais le concept de base des bases de données relationnelles et de normalisation des données est la jointure. Il y a peu de raisons d'utiliser une base de données relationnelle pour stocker des données avec ce. Les indices que cela se produise rapidement et efficacement.

L'ancienne était d'utiliser une table de maître et de transaction. Retour dans les âges sombres.

Cependant, vous pouvez utiliser un curseur pour faire le filtrage qui une jointure ferait. Un curseur fonctionne comme un tableau sur la table plutôt que de faire un filtre basé rejoindre et vous obtiendrez le même résultat.

Vous pouvez le faire avec les sous-requêtes si vous voulez en corrélation, mais des jointures mieux.

Mise en veille prolongée ne vous empêche pas de faire des jointures si vous avez un mappage d'association dans votre fichier carte de mise en veille prolongée. Voir, par exemple: http://www.jumpingbean.co.za/blogs/mark / hibernate_hql_inner_join_on_clause

SQL ... Sans Rejoint

SELECT * FROM table1
SELECT * FROM table2
SELECT * FROM table3

Cela ne va pas pour vous aider à bien.

La question est, quelle est votre sortie désirée, et quelles raisons avez-vous pour ne pas vouloir rejoindre?

Si vous souhaitez obtenir des données à partir de plusieurs tables dans une base de données relationnelle, vous vous joindrez les données. Peut-être cela est quelque chose que vous devez faire dans l'application comme le suggère James Noir.

Si vous pouviez jeter un peu plus de lumière sur la situation si nous pouvons être en mesure d'aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top