J'essaie de créer une vue avec une jointure croisée en fonction de plusieurs conditions.
Je sais quelle colonne rejoindre avec quelles colonnes. P>
1 dans le tableau A avec 1 et 2 dans le tableau B, P>
2 dans le tableau A avec 1 et 3 dans le tableau b. P> blockquote>
Je peux faire la même chose en créant une table de mappage avec cette logique et utilisez-la pour rejoindre, mais peut-il être effectué dans la définition de vue elle-même, c'est-à-dire que la logique est dans la définition de la vue? P> Tableau A P>
Man | Bananna Man | Apple Panda | Bananna Panda | Bamboo
4 Réponses :
Je suppose que vous pouvez le faire: créer une table dérivée à l'aide de vos valeurs connues et simplement y adhérer à la table de jonction / associative. Bien que je puisse stocker cela dans une table plutôt que pour une plus grande flexibilité et une plus grande maintenance à long terme.
Remarque: cette approche élimine la nécessité d'une jointure croisée. Vous pouvez faire une jointure croisée et exclure ces enregistrements qui sont dans un ensemble différent p> si vous devez garder la jointure croisée (mauvaise performance sur de grandes tables), cela peut fonctionner. ... p> Cependant, vous serez peut-être mieux de stocker les quantités qui ne correspondent pas en fonction des volumes de table au fil du temps. P> Tous deux de ces approches Valeurs du code durs. C'est généralement le premier signe en tant que développeur que vous faites quelque chose de mal. Dans de très rares circonstances, les valeurs sont codées dures; Au lieu de les stocker comme des variables dans une table qui permet une flexibilité du changement avec les changements de code. p> p>
DROP TABLE IF EXISTS A;
CREATE TABLE A
(ID SERIAL PRIMARY KEY
,Animal VARCHAR(12) NOT NULL UNIQUE
);
INSERT INTO a VALUES
(1,'Man'),
(2,'Panda');
DROP TABLE IF EXISTS B;
CREATE TABLE B
(ID SERIAL PRIMARY KEY
,Fruit VARCHAR(12) NOT NULL UNIQUE
);
INSERT INTO b VALUES
(1,'Banana'),
(2,'Apple'),
(3,'Bamboo');
SELECT *
FROM a
JOIN b
ON (a.id = 1 AND b.id IN(1,2))
OR (a.id = 2 AND b.id IN(1,3));
+----+--------+----+--------+
| ID | Animal | ID | Fruit |
+----+--------+----+--------+
| 1 | Man | 1 | Banana |
| 2 | Panda | 1 | Banana |
| 1 | Man | 2 | Apple |
| 2 | Panda | 3 | Bamboo |
+----+--------+----+--------+
Note that views serve almost no useful purpose in MySQL.
ne vous a pas eu? Vues Servir presque aucun but utile dans MySQL?
Vous voulez dire cette syntaxe de Joindre sur code> ne fonctionnera pas dans MySQL ou en général Vues code> dans MySQL ne sont pas utiles?
Je veux dire qu'en général, les vues de MySQL ne sont pas utiles.
Pouvez-vous me référer à un article / livre / poste, j'ai vu des vues toute ma vie. Je comprends les procédures stockées, les MVS pourraient être meilleurs dans certains scénarios, mais que c'est pour tout ce que tout est spécifiquement mysql.
Vous pouvez enregistrer votre cartographie dans la vue, en utilisant quelque chose comme ceci: je voudrais hautement em> vous recommander de ne pas le faire. Si et lorsque vous souhaitez ajouter, éditer ou supprimer des mappages, il est beaucoup plus facile de le faire en insérant / mise à jour / supprimer des lignes dans une table qu'il ne doit changer de modification de votre vue. P> Au contraire, il serait préférable de créer une table de jonction (entité Associatif) : p> alors vous pouvez y adhérer à ceci à votre vue: p>
Vous semblez vouloir vouloir: Je ne sais pas si vous recherchez une manière plus concise d'écrire ceci. P> P>
Nice et concis, même si j'ai créé une table de jonction qui est meilleure, je cherchais cela où condition.
Qu'est-ce que
conditions connues code>?Comme je connais
1 code> ID dans le tableau A doit être croisé avec1 code> et2 code> dans le tableau BComment sais-tu ça? Est-ce que cette logique est stockée n'importe où? On dirait que vous avez besoin d'une table de jonction pour stocker cet E.G.
Créer une hausse de table (AIDE INT, BID INT); Insert int Abmapping (aide, enchères) (1, 1), (1, 2), (2, 1), (2, 3); code>, vous pouvez utiliser cette table de jonction pour rejoindre vos deux personnes connues les tables.Je veux stocker la logique dans la définition de vue elle-même. J'ai une option pour créer une nouvelle table de mappage avec ces mappage d'identifiant et utiliser cela pour rejoindre. Mais je veux faire à la syntaxe de création de vue elle-même.
@YOGESHSHARMA a ajouté les conditions dans la question.
@ Garg10may La raison de la stocker dans une table est si elle change que vous pouvez le contrôler si des données au lieu d'un changement de code. Cela donne une plus grande flexibilité à votre utilisateur final et nécessite moins de changements de code par les développeurs.
hmm, ce serait mieux.