Mam następujący problem, mam dwa stoły, pierwsza tabela zawiera ciąg, takich jak 01001101110 Każda cyfra reprezentuje umiejętność wymienioną w tabeli dwa.

Więc pierwsza cyfra pokazuje zero, co oznacza, że osoba nie ma umiejętności z ID 1. Druga cyfra pokazuje, że osoba ma umiejętność ID 2

Tabela 1:

|-----------|-----------------------------|
|  name  |             skillset            |
|-----------|-----------------------------|
|   John  | 01001101110             |
|-----------|-----------------------------|

Tabela 2:

|-----------|-----------------------------|
|    id       |              skill              |
|-----------|-----------------------------|
|       1    | polite                         |
|-----------|-----------------------------|
|      2     | easy going                 |
|-----------|-----------------------------|

Teraz muszę utworzyć zapytanie z wynikiem

|-----------|-------------------|------------------|
|  name  |      polite        |   easy going  |
|-----------|-------------------|------------------|
|  John   |          0            |            1        |
|-----------|-------------------|------------------|
2
jan deeg 17 luty 2017, 01:41

2 odpowiedzi

Najlepsza odpowiedź

Widziałem takiego historii tak, jak ten byłego kodera wdrożył to, a teraz utknęliśmy z tym. Wyobrażam sobie, że jest tylko jeden indywidualny koder, który porusza się z firmy do firmy, wdrażając rzeczy w najbardziej sprytnym i najmniej utrzymujący sposób, a następnie szybko przechodząc do jego następnej firmy ofiary.

Znajduję się także ironiczny, że ktoś wdrożyłby bitfield w Varchar, ponieważ kończą się za pomocą pełnego bajtu (8 bitów) do przechowywania każdego 1 lub 0. : Facepalm:

W każdym razie, aby rozwiązać Twoje zadanie, musisz użyć dynamicznego zapytania SQL.

W rzeczywistości dowolny zapytanie tabeli obrotów wymaga dynamicznego SQL, ponieważ nie znasz liczby kolumn, dopóki nie sprawdzisz tabeli, która wymieni Twoją umiejętności, ale nie możesz uruchomić zapytania bez pierwszego znajomości Liczba kolumn. Więc musisz uruchomić co najmniej dwa zapytania.

Oto dane testowe:

create table table1 (name varchar(20), skillset varchar(200));

insert into table1 values ('John', '01001101110110');

create table table2 (id int, skill varchar(20));

insert into table2 values
    (1, 'polite'),
    (2, 'easy going'),
    (3, 'trustworthy'),
    (4, 'loyal'),
    (5, 'helpful'),
    (6, 'friendly'),
    (7, 'courteous'),
    (8, 'kind'),
    (9, 'obedient'),
    (10, 'cheerful'),
    (11, 'thrifty'),
    (12, 'brave'),
    (13, 'clean'),
    (14, 'reverent');

Teraz jest sprytna zapytanie, która wytwarza SQL dla dynamicznego zapytania, poprzez dołączanie jednego pola na liście SELECT dla każdego wpisu w tabeli umiejętności. Kluczem jest MySQL's

Bill Karwin 17 luty 2017, 15:36