• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SELECT z bazy danych w połaczeniu z CONCAT

Object Storage Arubacloud
+1 głos
191 wizyt
pytanie zadane 15 maja 2018 w SQL, bazy danych przez kukisp Nowicjusz (150 p.)
Cześć potrzebuje uzyskac wartośc z kolumny w bazie danych, gdzie są 3 kolumny, powiedzmy x,y,z ale zeby wybrać odpowiedni rekord mam numer który jest połączeniem xy. Zeby zobrazowac fakt, robie to tak SELECT z FROM  tabela WHERE SELECT CONCAT (x,y) FROM tabela  = select SUBSTR( i tutaj dalsza cześc wyrazenia z innch tabel której wartośc odpowiada xy)

Doszedłem do momentu gdzie za pomocą CONCAT i select SUBSTR osiagam to samo by odnalezc odpowiedni wiersz i wyciagnać z niego wartosc z kolumny z. Lecz nie wiem jak to ugryzc, bo wyskakuje mi bład składni. Czy mogę w pierwszym SELECT gdzir formułuje WHERE przyrównac np WHERE SELECT ... = SELECT .... ?
komentarz 15 maja 2018 przez Chess Szeryf (76,710 p.)
Napisz jaki rezultat konkretnie chcesz osiągnać. Czy masz w tabeli kolumnę "xy"?
komentarz 15 maja 2018 przez kukisp Nowicjusz (150 p.)
przeniesione 20 maja 2018 przez Arkadiusz Waluk
W tabeli mam osobno kolumne x, y, z i chce wyciagnąc wartosć z. W innej tabeli mam wartość xy razem, i teraz chce na podstawie tej wartosci xy otrzymac wartosc z, wczesniej jednak zeby móc przyrównac xy do x,y połaczyłem je komenda concat.

2 odpowiedzi

0 głosów
odpowiedź 15 maja 2018 przez Chess Szeryf (76,710 p.)
edycja 15 maja 2018 przez Chess
MariaDB [turqus]> show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `x` varchar(20) DEFAULT NULL,
  `y` varchar(20) DEFAULT NULL,
  `z` varchar(20) DEFAULT NULL,
  `xy` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

MariaDB [turqus]> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
 SELECT full FROM (select concat(x,y) as full from t1) as tx inner join
     (SELECT col2 from (SELECT col as col2 from t2) as ty) as ty2 where col2 = full;

Solution 1:

select distinctrow z from t1 as xx1 
	inner join 
		(SELECT full FROM (
			select concat(x,y) as full from t1 as xxxxxxxx
		) as tx 
		inner join  
		(SELECT col2 from (SELECT col as col2 from t2) as ty2) as ttt444 where col2 = full) as xxxx33
	inner join 
		(select concat(x,y) from t1) as xwr
		inner join
			(SELECT col from t2) as brwer
			where col = full and full=concat(x,y);

To samo zapytanie, ale napisane na widoku (view):

MariaDB [turqus]> show create view view1\G
*************************** 1. row ***************************
                View: view1
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=``@`localhost` SQL SECURITY DEFINER VIEW `view1` AS (select concat(`t1`.`x`,`t1`.`y`) AS `full` from `t1`)
character_set_client: utf8
collation_connection: utf8_unicode_ci

MariaDB [turqus]> show create view view2\G
*************************** 1. row ***************************
                View: view2
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=``@`localhost` SQL SECURITY DEFINER VIEW `view2` AS (select `t2`.`col` AS `col` from `t2`)
character_set_client: utf8
collation_connection: utf8_unicode_ci

MariaDB [turqus]> show create view view3\G
*************************** 1. row ***************************
                View: view3
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=``@`localhost` SQL SECURITY DEFINER VIEW `view3` AS (select `view1`.`full` AS `full` from (`view1` join `view2`) where (`view2`.`col` = `view1`.`full`))
character_set_client: utf8
collation_connection: utf8_unicode_ci
select full from view1 inner join (view2)
     where (view2.col = view1.full);

Solution 2:

select z from t1 inner join (view3) where (view3.full)=concat(x,y);

Dla takich danych w tabelach:

MariaDB [turqus]> select * from t1;
+----+-----------+-----------+------------+-----------+
| id | x         | y         | z          | xy        |
+----+-----------+-----------+------------+-----------+
|  1 | pear      | apple     | strawberry | salat     |
|  2 | tomato    | potato    | blueberry  | juice     |
|  3 | cherry    | lemon     | nut        | breakfast |
|  4 | calendula | dandelion | leaf       | decoction |
+----+-----------+-----------+------------+-----------+

MariaDB [turqus]> select * from t2;
+----+--------------------+
| id | col                |
+----+--------------------+
|  1 | pearapple          |
|  2 | tomatopotato       |
|  3 | cherry             |
|  4 | calenduladandelion |
+----+--------------------+

rezultat to:

+------------+
| z          |
+------------+
| strawberry |
| blueberry  |
| leaf       |
+------------+

Jeśli kod jest źle pofarmatowany, to pofarmatuj jak chcesz.

Link1, link2, link3, link4, link5, link6, link7, link8.

Helpful: link1, link2.

0 głosów
odpowiedź 20 maja 2018 przez Catalonya1992 Mądrala (5,440 p.)
Czy nie wystarczy czy jak napiszesz funkcję, która rozdziela wartość xy na x i y? Pytanie tylko czy to możliwe i jest jakaś reguła jak łączyłeś te wartości. W przeciwnym razie wykonaj operację odwrotną, tzn. w drugiej tabeli złącz x z y i przywrównaj to do kolumny xy, czyli jescze raz:

1. rozdziel xy na x i y: wtedy piszesz normalnego selecta, bo masz oddzielne kolumny

2. złącz x z y i będziesz miał w obu kolumnach xy i xy, więc tez piszesz normalnego selecta

Podobne pytania

+2 głosów
1 odpowiedź 171 wizyt
pytanie zadane 23 listopada 2021 w SQL, bazy danych przez DLFDL Początkujący (270 p.)
+1 głos
1 odpowiedź 167 wizyt
+1 głos
1 odpowiedź 191 wizyt
pytanie zadane 8 października 2020 w SQL, bazy danych przez Mateusz Kita Początkujący (380 p.)

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...