JOIN + NOT IN

Yurik

/dev/null
JOIN + NOT IN

PHP:
CREATE TABLE details ( 
  id int(10) unsigned NOT NULL auto_increment, 
  iditem int(10) unsigned NOT NULL default '0', 
  idorder int(10) unsigned NOT NULL default '0', 
  PRIMARY KEY  (id) 
) TYPE=MyISAM; 

INSERT INTO details VALUES (1, 1, 1); 
INSERT INTO details VALUES (2, 1, 2); 
INSERT INTO details VALUES (3, 2, 2); 
INSERT INTO details VALUES (4, 3, 2); 

CREATE TABLE items ( 
  iditem int(10) unsigned NOT NULL auto_increment, 
  title char(15) NOT NULL default '', 
  PRIMARY KEY  (iditem) 
) TYPE=MyISAM; 

INSERT INTO items VALUES (1, 'Селедка'); 
INSERT INTO items VALUES (2, 'Килька'); 
INSERT INTO items VALUES (3, 'Сардина');
Нужно для idorder=1 выбрать те товары которые ещё не заказаны, т.е. чтобы выдало "Килька" и "Сардина"
Одним запросом?
 

Апельсин

Оранжевое создание
В голову прихоидт только это:
[sql]
select * from items left join (select * from details where idorder=1) d1 on d1.iditem=items.iditem where d1.iditem is NULL;
[/sql]

но работать будет только в 4.1
а так временные таблицы ..
 

Alien

Новичок
SELECT details.* , items.* FROM items, details
left join details as ddd
on ddd.iditem = items.iditem and ddd.iditem = details.iditem
where
details.idorder = 1 and
ddd.iditem is null

=> "Килька" и "Сардина"
 

chira

Новичок
Код:
mysql> select i.* from items i LEFT JOIN details d ON i.iditem=d.iditem AND d.idorder=1
    -> where d.id IS NULL;
+--------+---------+
| iditem | title   |
+--------+---------+
|      2 | Килька  |
|      3 | Сардина |
+--------+---------+
2 rows in set (0.00 sec)

mysql>
 
Сверху