Problem mit in (...)

Problem mit in (...)

am 15.01.2008 21:57:43 von Nurkai

Hi @all,

Eine Funktion bekommt als Parameter eine In-Klausel.

Beispiel:
'(1,2,3,...)' geht ja auch, aber bei ...

'select * from artikel where id in (1,1)' liefert natürlich den
Datensatz 1x, brauche Ihn aber 2x.

Das kann ich auch im Code lösen, wäre aber toll, wenn jemand dafür ne
Lösung hätte.

Hat jemand ne Idee?

Re: Problem mit in (...)

am 16.01.2008 10:00:08 von Boris Stumm

Kai Schwartze wrote:
> 'select * from artikel where id in (1,1)' liefert natürlich den
> Datensatz 1x, brauche Ihn aber 2x.

select * from artikel where id in (1)
union
select * from artikel where id in (1)

Re: Problem mit in (...)

am 16.01.2008 10:47:36 von mueller

Boris Stumm wrote:

> Kai Schwartze wrote:
>> 'select * from artikel where id in (1,1)' liefert natürlich den
>> Datensatz 1x, brauche Ihn aber 2x.
>
> select * from artikel where id in (1)
> union
> select * from artikel where id in (1)

Wenn dann

SELECT * FROM artikel WHERE id = 1
UNION ALL
SELECT * FROM artikel WHERE id = 1;

weil per default UNION DISTINCT gemacht wird.

Robert

Re: Problem mit in (...)

am 16.01.2008 17:13:15 von Claus Reibenstein

Kai Schwartze schrieb:

> 'select * from artikel where id in (1,1)' liefert natürlich den
> Datensatz 1x, brauche Ihn aber 2x.

Das geht nur, wenn Du Dir anhand der IN-Liste ein entsprechendes
SQL-Statement zusammenbaust. Von sich aus liefert MySQL mit dieser Liste
korrekterweise genau einen Datensatz.

Gruß. Claus

Re: Problem mit in (...)

am 16.01.2008 17:40:46 von Nurkai

select * from artikel where A_ID in (1)
union all
select * from artikel where A_ID in (1)

Ja, also im Prinzip geht das, aber leider ist das eine temporäre
Tabelle

Can't reopen table: 'tmp_artikel'

Re: Problem mit in (...)

am 17.01.2008 11:41:33 von Thomas Rachel

Kai Schwartze schrieb:
> 'select * from artikel where id in (1,1)' liefert natürlich den
> Datensatz 1x, brauche Ihn aber 2x.

CREATE TEMPORARY TABLE zaehlen (lfd int auto_increment primary key, id int);
INSERT INTO zaehlen (id) VALUE (1),(1),(2),(4);
SELECT * FROM artikel JOIN zaehlen ON (id) ORDER BY lfd;

(ungetestet)

HTH,


Thomas