I'm trying to run a query on the database to collect all rows from table A that are referenced in a column in table B:
Query I'm Running
-- Consulta a recolher da tabela A as linhas com ID referenciado na tabela B
SELECT A.*
FROM table_eshop_lines A
WHERE A.id IN (
SELECT REPLACE(B.lines_id, ';', ',') AS ids
FROM table_eshop B
WHERE B.id=1
)
The expected result would be 3 lines, namely lines 1, 2 and 3. What happens is that I only get line 1:
┌──────┬───────┬───────┬────────┬────────┬───────┬──────────────┐
│ id │ pid │ ref │ name │ isbn │ qtd │ unit_price │
├──────┼───────┼───────┼────────┼────────┼───────┼──────────────┤
│ 1 │ 254 │ │ John │ │ 1 │ 25.08 │
└──────┴───────┴───────┴────────┴────────┴───────┴──────────────┘
Only query table B
If I run the query from the second table, I get the desired values:
-- Consulta a tabela B
SELECT REPLACE(B.lines_id, ';', ',') AS ids
FROM table_eshop B
WHERE B.id=1
You will return it to me:
┌──────────┐
│ ids │
├──────────┤
│ 1,2,3 │
└──────────┘
Tables A and B
Below is the description of each of the tables obtained through MySQL DESCRIBE (English) :
DESCRIBE 'table_eshop_lines'
┌────────────┬───────────────┬──────┬───────┬─────────┬────────────────┐
│ Field │ Type │ Null │ Key │ Default │ Extra │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ id │ int(11) │ NO │ PRI │ NULL │ auto_increment │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ pid │ int(11) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ ref │ varchar(200) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ name │ varchar(500) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ isbn │ varchar(500) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ qtd │ int(11) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ unit_price │ decimal(10,2) │ NO │ │ NULL │ │
└────────────┴───────────────┴──────┴───────┴─────────┴────────────────┘
DESCRIBE 'table_eshop'
┌─────────────┬───────────────┬──────┬───────┬─────────┬────────────────┐
│ Field │ Type │ Null │ Key │ Default │ Extra │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ id │ int(11) │ NO │ PRI │ NULL │ auto_increment │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ sid │ text │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ uid │ int(11) │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ lines_id │ text │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ total_goods │ decimal(10,2) │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ end_time │ datetime │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ status │ tinyint(1) │ NO │ │ NULL │ │
└─────────────┴───────────────┴──────┴───────┴─────────┴────────────────┘
Question:
What am I doing wrong so that when I execute the total query I indicated, instead of receiving the 3 rows from the table_eshop_lines
table, I only get the first row that contains the 1
value in the id
?