0
votes

Est-ce que ceci est possible dans SQL?

Je ne suis pas sûr de savoir comment demander à la question, donc je vais donner un exemple, pour voir si cela est possible avec SQL.

Disons qu'un client visite un magasin et un système crée un visiteux. Ensuite, il place une commande dans une table des commandes, liée à la visite. Ensuite, il remplit un formulaire d'expédition, dans une table d'expédition, liée à l'ID de visite. Ensuite, le système génère un reçu, dans une table de réception, liée au VisitID. Ensuite, il remplit une forme de retour, dans une table de retour de retour, liée au Visitid.

Ainsi, est-il un moyen d'interroger le système à montrer pour un visionneur il existe / n'est pas un record de commande , Enregistrement de formulaire d'expédition, enregistrement de reçu, enregistrement de retour? Cela serait pratique dans un DBGrid pour montrer toutes les activités du client sur ce VisitID. Chaque table (commandes, prestation d'expédition, devenue de réception, retour de force, etc.) est d'une structure différente et de différents champs, mais reliée par l'ID de visite et peut être présente ou non présentée, ou peut avoir plusieurs commandes pendant ce siteid.

SO - Sélectionnez les commandes, la prescription, la forme de réception, la signalisation de retour où visitez le fichier = x. Donc, je pourrais présenter les informations dans une grille telle que: xxx


2 commentaires

Quel SGBD utilisez-vous? Vous devriez toujours marquer des questions SQL avec le SGBD que vous leur demandez.


J'utilise mysql, merci.


3 Réponses :


0
votes

visites qui n'ont pas de disques dans toutes les tables: xxx


1 commentaires

Merci, ojtamojtam; Existe-t-il un moyen d'énumérer les résultats à l'aide de groupements afin que chaque résultat soit une nouvelle ligne comme dans l'exemple?



0
votes

Peut-être que vous recherchez Union tout code>: xxx pré>

ou vous pouvez vouloir une agrégation de chaîne. Ceci est dépend du SGMS et vous n'avez pas mentionné votre SGBD. Ceci est pour MySQL: P>

select
  visitid,
  ord.ids as orderids,
  rcp.ids as receiptids,
  shp.ids as shippingids,
  ret.ids as returnids
from visits v
left join
  (select visitid, group_concat(orderid) as ids from orders group by visitid) ord
    using (visitid)
left join
  (select visitid, group_concat(receiptid) as ids from receipts group by visitid) rcp
    using (visitid)
left join
  (select visitid, group_concat(shippingid) as ids from shippings group by visitid) shp
    using (visitid)
left join
  (select visitid, group_concat(returnid) as ids from returns group by visitid) ret
    using (visitid)
order by visitid;


2 commentaires

"Ceci est pour mysql:" group_concat Sélectionnez VisitID, group_concat ( ) .. sans groupe par VisitID en tant que colonne agrégée et une colonne non agrégée ne peut pas être mélangée


Merci @raymond Nijland. Vous avez raison bien sûr, j'ai oublié le groupe par clauses lors de la saisie des sous-sollicitations.



0
votes

Merci à tous, vous m'avez permis de répondre à la question. À mes fins, j'ai combiné les résultats pour rendre ce SOL

FormID        FormType       FormTitle
23            1              Order ID
26            1              Order ID
28            1              Order ID
342           2              Shipping ID
343           2              Shipping ID
367           2              Shipping ID


1 commentaires

Je suis content que vous ayez trouvé une réponse à votre problème. Vous ne devriez pas utiliser les jointures séparées par des virgules cependant. Il y avait été redondant dans SQL 1992 standard. C'est considéré comme un mauvais style de les utiliser encore. Et vous voudrez peut-être ajouter une clause par , afin de vous assurer d'obtenir des commandes d'abord et d'expédition de seconde. Union TOUT seul ne garantit pas une commande. Vous avez besoin d'une commande par pour garantir un résultat ordonné.