Avatar billede Nederb Juniormester
25. maj 2018 - 09:04 Der er 12 kommentarer

SQL med JOIN

Jeg forsøger at køre en forespørgsel i phpMyadmin med en JOIN
Jeg skal bruge:
fornavn fra tabel_1
efternavn fra tabel_1
mail fra tabel_2
Nøglen er id

En af mine forespørgseler ser sådan ud:
SELECT tabe_l_1.fornavn, tabel_1.efternavn, tabel_2.mail
FROM tabel_1
INNER JOIN tabel_1 ON tabel_1.id=tabel_2.id

Hvor er fejlen?

Lars
Avatar billede acore Ekspert
25. maj 2018 - 09:28 #1
Måske

SELECT tabel_1.fornavn, tabel_1.efternavn, tabel_2.mail
FROM tabel_1
INNER JOIN tabel_2 ON tabel_1.id=tabel_2.id
Avatar billede olsensweb.dk Ekspert
25. maj 2018 - 10:19 #2
dvs du har et en til en forhold mellem de 2 tabeller ??, så kan du ligeså godt slå dem sammen.
så tabellen ser sådan ud:

tabel_1
id, fornavn, efternavn, mail


burde din structur ikke se ca sådan ud ?

tabel_1
id, fornavn, efternavn,

tabel_2
id, mail, tabel_1_id


i tabel_2 er tabel_1_id fremmed nøgle til tabel_1
Avatar billede Nederb Juniormester
28. maj 2018 - 11:39 #3
Tabellerne indeholde flere date end dem jeg skal bruge
tabel_1 burde burde også indeholde mail, men det er ikke mig der har lavet databasen og hvad grunden til den er lavet på denne måde ved jeg ikke.

Denne virker ikke :
SELECT tabel_1.fornavn, tabel_1.efternavn, tabel_2.mail
FROM tabel_1
INNER JOIN tabel_2 ON tabel_1.id=tabel_2.id
Avatar billede acore Ekspert
28. maj 2018 - 12:46 #4
"virker ikke" - kan du uddybe?
Avatar billede olsensweb.dk Ekspert
28. maj 2018 - 14:16 #5
prøvede lige sql fra #1, og den virker, så når du siger den ikke virker så er der noget du ikke oplyser, eller oplyser forkert

sql dump
CREATE TABLE `tabel_1` (
  `id` int(11) NOT NULL,
  `fornavn` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `efternavn` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tabel_1` (`id`, `fornavn`, `efternavn`) VALUES
(1, 'rip', 'andemad'),
(3, 'rap', 'and'),
(4, 'rup', 'and'),
(5, 'mickey', 'mouse'),
(7, 'bimmer', 'vildmand'),
(8, 'jule', 'mand');

CREATE TABLE `tabel_2` (
  `id` int(11) NOT NULL,
  `mail` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tabel_2` (`id`, `mail`) VALUES
(1, 'rip@andeby.dk'),
(3, 'rap@andeby.dk'),
(4, 'rup@andeby.dk'),
(5, 'mickey.mouse@andeby.dk'),
(7, ''),
(8, 'jule.mand@2412.gl');

ALTER TABLE `tabel_1`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_lastname` (`efternavn`);

ALTER TABLE `tabel_2`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tabel_1`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;

ALTER TABLE `tabel_2`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;



sql fra #1
SELECT tabel_1.fornavn, tabel_1.efternavn, tabel_2.mail FROM tabel_1 INNER JOIN tabel_2 ON tabel_1.id=tabel_2.id


output
fornavn,efternavn,mail
rip,andemad,rip@andeby.dk
rap,and,rap@andeby.dk
rup,and,rup@andeby.dk
mickey,mouse,mickey.mouse@andeby.dk
bimmer,vildmand,
jule,mand,jule.mand@2412.gl
Avatar billede Nederb Juniormester
29. maj 2018 - 07:53 #6
SQL'en ser sådan ud i den rigtige form:

SELECT aalborg-person.fornavn, aalborg-person.efternavn, aalborg-tilsynsperson.mail
FROM aalborg-person
INNER JOIN aalborg-tilsynsperson ON aalborg-person.id=aalborg-tilsynsperson.id

Fejl:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-person JOIN aalborg-tilsynsperson ON aalborg-person.id=aalborg-tilsynsperson.id' at line 2
Avatar billede acore Ekspert
29. maj 2018 - 08:15 #7
Kan det være noget med brugen af "-" der opfattes som et minustegn?

Prøv at sætte ` rundt om alle navne - altså for eksempel  `aalborg-person.fornavn` og `aalborg-person` alle steder.

Og så en anden gang: Post den information du får - især fejl - fra starten - så bliver det lidt lettere at hjælpe.

Som jeg skriver i #3 og olsenweb.dk i #5 er der ikke noget galt i udgangspunktet. Dog skal det siges, at vi hellr ikke kender strukturen på de to involverede tabeller.
Avatar billede Nederb Juniormester
31. maj 2018 - 10:55 #8
SELECT `aalborg-person.fornavn`, `aalborg-person.efternavn`,`'aalborg-tilsynsperson.mail`
FROM `aalborg-person`
INNER JOIN `aalborg-tilsynsperson` ON `aalborg-person.id` = `alborg-tilsynsperson.id`

Fejl:
#1054 - Unknown column 'aalborg-person.fornavn' in 'field list'
Avatar billede MADOlsen Forsker
31. maj 2018 - 11:34 #9
Helt generelt så er det altså dumt at bruge '-' i feltnavne.
Avatar billede olsensweb.dk Ekspert
31. maj 2018 - 16:06 #10
#8
prøv at sætte backtick omkring tabel navnet seperat

(utested)
SELECT `aalborg-person`.`fornavn`, `aalborg-person`.`efternavn`,`aalborg-tilsynsperson`.`mail`
FROM `aalborg-person`
INNER JOIN `aalborg-tilsynsperson` ON `aalborg-person`.`id` = `alborg-tilsynsperson`.`id`



#9
det gælder alle special tegn, feks mellemrum, +,-,., æøå, #, reseveret ord, ....

her er en tabel hvor næsten alt er gået galt

CREATE TABLE `tbl_ups` (
  `id` int(11) NOT NULL,
  `navn ` varchar(25) NOT NULL,
  `født` varchar(25) NOT NULL,
  `addresse` varchar(25) NOT NULL,
  `post nummer` varchar(4) NOT NULL,
  `by` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `tbl_ups` (`id`, `navn `, `født`, `addresse`, `post nummer`, `by`) VALUES
(1, 'hans', '01-01-1970', 'fswewr', '2500', 'valby'),
(2, 'grethe', '01-01-1970', 'dswer', '4000', 'roskilde');


ALTER TABLE `tbl_ups`
  ADD PRIMARY KEY (`id`);


ALTER TABLE `tbl_ups`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

mellemrum i slutningen af navn, og i post nummer
ø i kolonne navn (født)
by er et reseveret ord


her er man tvunget til at bruge backtick, i mysql, og havde det været mssql skulle det være firkant paranteser.
så kort sagt, giv databaser, tabeller og collonner ordentlige navne så der ikke skal bruges backtick.
Avatar billede Nederb Juniormester
01. juni 2018 - 10:19 #11
SELECT `aalborg-person`.`fornavn`, `aalborg-person`.`efternavn`,`aalborg-tilsynsperson`.`mail`
FROM `aalborg-person`
INNER JOIN `aalborg-tilsynsperson` ON `aalborg-person`.`id` = `alborg-tilsynsperson`.`id`

Fejl: #1054 - Unknown column 'alborg-tilsynsperson.id' in 'on clause'
Avatar billede acore Ekspert
01. juni 2018 - 10:30 #12
Prøv at vænne dig til at læse fejlmeldinger, selv om de af og tal kan være kryptiske eller intet-sigende.

I dit tilfælde er fejlen 'alborg-tilsynsperson.id' findes ikke - sikkert fordi du har skrevet 'alborg-tilsynsperson.id' og ikke 'aalborg-tilsynsperson.id'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Cognizant Technology Solutions Denmark ApS

Senior Test Engineer

Optum Computational Engineering ApS

SW developer