Sida 1 av 1
SQL söka i concat kolumn
Postat: 7 november 2007, 13:22:40
av kifkroker
Hej
Jag har två kolumner, fornamn och efternamn, och vill söka i en sammansättning av dess kolumner. Någon som kan hjälpa till med en sql sats för detta?
För att förtydliga
Kod: Markera allt
select concat(fornamn, ' ', efternamn) as namn FROM personer
ger mig en kolumn med namnen ihopsatta efter önskemål, men jag vill nu göra en sökning i den kolumnen, det naturliga kändes att fyll på med
Men icke. Så några förslag, eller andra angreppssätt? Det går ju att göra omständiga workarounds på andra håll, men det vore skönt om någon hade en enkel sql sats istället. Satser efter varandra går också bort (ex. select into och sedan söka där)
Postat: 7 november 2007, 14:38:04
av nole
SELECT concat(name,' ' ,adress) as namn FROM trainers where concat(name, ' ' ,adress) regexp 'sven'
Fungerade fint för mig i Mysql 5.0 under linux.
EDIT: SELECT * from trainers where concat(name, ' ', adress) like "%sven%" lite snyggare.
Postat: 7 november 2007, 14:51:06
av sodjan
Subselect.
Kod: Markera allt
SELECT namn
FROM (SELECT concat(fornamn, ' ', efternamn) AS namn FROM personer)
WHERE namn ....
Exakt syntaxt kan variera med databasmotor, men i princip så...
Postat: 7 november 2007, 17:14:09
av kifkroker
fungerade fint på MySQL 3, stora tack!
Postat: 7 november 2007, 17:17:50
av sodjan
Vad fungerade fint ?
Postat: 7 november 2007, 20:35:54
av kifkroker
antingen min nya cykel som jag köpt, eller det jag efterfrågade här i tråden. Det tidigare svaret
Postat: 7 november 2007, 22:05:45
av sodjan
Vilket av dom ?
Postat: 7 november 2007, 22:09:56
av speakman
Cykeln?
Postat: 7 november 2007, 22:48:02
av nole
sodjan skrev:Vilket av dom ?
Båda mina SQL satser fungerar, men en av dem är mer lik det han efterfrågade att göra.
Postat: 8 november 2007, 15:12:06
av kifkroker
ok, här kommer en till sql sats som jag trodde var trivial men inte kan lösa (med fiktiva namn)
tabell:
Kod: Markera allt
Namn:Plagg
____________
Kalle:Skor
Kalle:Byxor
Johan:Skor
Kalle:Jacka
Johan:Jacka
Erik:Skor
Och jag undrar hur en sqlsats ser ut som svara på frågan: vilka namn har både skor och jacka?
Postat: 9 november 2007, 11:43:34
av nole
Ganska enkelt om man kör Mysql 5 eller senare (tror subselects kräver det i alla fall)
Kod: Markera allt
SELECT * from klader where namn = ANY(SELECT namn from klader where plagg = 'Skor') and plagg = 'Jacka'
Men annars vet jag inte..
Postat: 9 november 2007, 19:11:46
av sodjan
Har kört ett par tester. Bådes nole's och en modifierad variant
som även visar *båda* plaggen för de aktuella personerna.
Kod: Markera allt
$ @sql_test
$ sql$
--
-- Skapa en databas...
--
create database filename test1;
--
-- skapa en tabell...
--
create table klader
(namn char(5),
plagg char(5));
--
-- Lägg in lite testdata...
--
insert into klader values ('Kalle','Skor');
1 row inserted
insert into klader values ('Kalle','Byxor');
1 row inserted
insert into klader values ('Johan','Skor');
1 row inserted
insert into klader values ('Kalle','Jacka');
1 row inserted
insert into klader values ('Johan','Jacka');
1 row inserted
insert into klader values ('Erik','Skor');
1 row inserted
commit;
--
-- Först en enkel select...
--
select * from klader;
NAMN PLAGG
Kalle Skor
Kalle Byxor
Johan Skor
Kalle Jacka
Johan Jacka
Erik Skor
6 rows selected
commit;
--
-- Sedan nole's select...
--
SELECT * from klader
where namn = ANY(SELECT namn from klader where plagg = 'Skor')
and plagg = 'Jacka';
NAMN PLAGG
Kalle Jacka
Johan Jacka
2 rows selected
commit;
--
-- Sedan är modifierad varient som visar alla plagg...
--
select * from
(select namn as t1_namn, plagg as t1_plagg
from klader where plagg = 'Skor') as t1
natural join
(Select namn as t2_namn,plagg as t2_plagg
from klader where plagg = 'Jacka') as t2
where t1_namn = t2_namn;
T1.T1_NAMN T1.T1_PLAGG T2.T2_NAMN T2.T2_PLAGG
Kalle Skor Kalle Jacka
Johan Skor Johan Jacka
2 rows selected
commit;
--
-- Kasta databasen...
--
drop database filename test1;
--
-- Klart !
--
exit
$ set nover
$
Kommandofilen ligger på mitt system och kan köras om man
telnet'ar in... Se tråden :
http://elektronikforumet.com/forum/view ... hp?t=21877