2010-06-30 3 views
1

J'essaie de comprendre et de modifier une requête SQL utilisée par un champ de saisie pour effectuer une recherche intelligente.remplacer joint interne avec sélectionner, peut-être?

Le code original est ici:

((`clients` INNER JOIN `addresstorecord` ON `clients`.`uuid` = 
    `addresstorecord`.`recordid` AND `addresstorecord`. 
    `tabledefid`='tbld:6d290174-8b73-e199-fe6c-bcf3d4b61083' AND 
    addresstorecord.primary='1') INNER JOIN 
    `addresses` ON `addresstorecord`.`addressid` = `addresses`.`uuid`) 

Je ne ai pas besoin d'une jointure interne, comme toutes mes informations sont déjà dans une table.

Dans ce cas, pourrais-je simplement remplacer la requête de jointure interne par mon nom de table? Ou devrais-je réellement faire une sélection de déclaration?

+2

N'essaieriez-vous pas d'être plus rapide que de demander ici? – RedFilter

+1

bien, oui, sauf que ça ne marche pas et je me demande si c'est pour ça, ou si ça devrait théoriquement fonctionner. Si cela devrait fonctionner, alors quelque chose d'autre est probablement le problème. – Jacob

+0

L'extrait que vous avez posté fait référence à 3 tables: 'addresses',' addresstorecord', 'clients'. Comme l'a dit Bill Karwin, le but des jointures pourrait être de restreindre l'ensemble des résultats finaux. Ils pourraient également être nécessaires s'il y a des données requises dans ces tableaux. Cependant, vous ne semblez pas avoir posté la requête complète, ce qui rend difficile de comprendre exactement ce qu'il est censé faire. Vous n'avez pas non plus dit pourquoi vous voulez le changer, ou quel résultat vous voulez obtenir. – Mike

Répondre

1

Une requête peut utiliser une jointure pour limiter les lignes dans le jeu de résultats, et pas seulement pour afficher des colonnes supplémentaires. Par exemple:

INSERT INTO tableA (col1) VALUES (10), (20), (30); 
INSERT INTO tableB (col1) VALUES (20); 

SELECT tableA.col1 FROM tableA; 

Renvoie trois lignes: 10, 20 et 30.

SELECT tableA.col1 FROM tableA JOIN tableB ON tableA.col1 = tableB.col1; 

Retourne une ligne: 20.

Donc, dans votre exemple, la jointure signifie que la requête retourne uniquement ceux clients qui ont une ligne correspondante dans addresses.

+0

Merci d'avoir expliqué que Je n'en ai pas besoin du tout, car toutes mes données sont seulement dans une table. Étant donné que la requête de mon exemple semble être un paramètre d'une requête plutôt qu'une requête elle-même, est-ce que le remplacer par le nom de la table contenant mes données suffirait? – Jacob

+0

Je ne peux pas répondre à cela sans voir la requête et une description du résultat souhaité de la requête. Vous avez fourni non plus. –

0

Si vous supprimez les jointures, toutes les lignes de la table des clients seront générées. Si c'est ce que vous voulez, vous pouvez supprimer les jointures, mais je ne le pense pas. Les jointures filtrent réellement votre sortie pour ne donner que les lignes des clients où clients.uuid = addresstorecord.recordid et ainsi de suite. Je pense que toutes les données que vous voulez voir dans la sortie sont dans la table des clients mais les données que vous devez filtrer ne le sont pas, vous avez donc besoin des jointures.

Questions connexes