问两个SQL语句问题(MYSQL)

SQL code
mysql> DESCRIBE 入库单表;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| 单号       | text     | YES  |     | NULL    |       |
| 入库日期   | datetime | YES  |     | NULL    |       |
| 品名       | text     | YES  |     | NULL    |       |
| 供货商编号 | text     | YES  |     | NULL    |       |
| 颜色       | text     | YES  |     | NULL    |       |
| 规格       | text     | YES  |     | NULL    |       |
| 数量       | int(11)  | YES  |     | NULL    |       |
| 单位       | text     | YES  |     | NULL    |       |
| 单价       | double   | YES  |     | NULL    |       |
| 金额       | double   | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
10 rows in set (0.19 sec)

mysql> DESCRIBE LSB;
+------------+------+------+-----+---------+-------+
| Field      | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| 单号       | text | YES  |     | NULL    |       |
| 品名       | text | YES  |     | NULL    |       |
| 供货商编号 | text | YES  |     | NULL    |       |
| 颜色       | text | YES  |     | NULL    |       |
| 规格       | text | YES  |     | NULL    |       |
| 单位       | text | YES  |     | NULL    |       |
+------------+------+------+-----+---------+-------+
6 rows in set (0.05 sec)

mysql> SELECT * FROM 入库单表;
+------+---------------------+------+------------+------+------+------+------+--
----+------+
| 单号 | 入库日期            | 品名 | 供货商编号 | 颜色 | 规格 | 数量 | 单位 |
单价 | 金额 |
+------+---------------------+------+------------+------+------+------+------+--
----+------+
| 001  | 2011-05-16 16:03:02 | CP   |            |      |      |   12 |      |
  5 |   60 |
+------+---------------------+------+------------+------+------+------+------+--
----+------+
1 row in set (0.00 sec)


mysql> SELECT * FROM LSB;
+------+------+------------+------+------+------+
| 单号 | 品名 | 供货商编号 | 颜色 | 规格 | 单位 |
+------+------+------------+------+------+------+
| 001  | CP   |            |      |      |      |
+------+------+------------+------+------+------+
1 row in set (0.00 sec)


mysql> SELECT 入库单表.单号 FROM 入库单表 WHERE 入库单表.单号 = LSB.单号;
ERROR 1054 (42S22): Unknown column 'LSB.鍗曞彿' in 'where clause'


mysql> SELECT 入库单表.单号 FROM 入库单表 inner join LSB on 入库单表.单号 = LSB.
单号;
+------+
| 单号 |
+------+
| 001  |
+------+
1 row in set (0.00 sec)



1、上面的 SELECT .... WHERE ... 语句为什么错呢? 即使把 FROM 后面在加一个 FROM “入库单表, LSB” 也是错的。
2、上面的 SELECT .... INNER JOIN .... 语句为什么对呢?





===============================================================================================
===============================================================================================

帮修改下面的 DELETE 语句。 DELETE 语句中的 “\” 的作用是连接字符串的,这个符号是C/C++中表示:下面的字符串和上面的字符串是同一个。所以“\” 是没错的

SQL code
mysql> DESCRIBE LSB_RKZL;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| 单号       | text    | YES  |     | NULL    |       |
| 品名       | text    | YES  |     | NULL    |       |
| 供货商编号 | text    | YES  |     | NULL    |       |
| 颜色       | text    | YES  |     | NULL    |       |
| 规格       | text    | YES  |     | NULL    |       |
| 单位       | text    | YES  |     | NULL    |       |
| 总量       | int(11) | YES  |     | NULL    |       |
+------------+---------+------+-----+---------+-------+
7 rows in set (0.09 sec)


mysql> DESCRIBE LSB_KCZL;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| 单号       | text    | YES  |     | NULL    |       |
| 品名       | text    | YES  |     | NULL    |       |
| 供货商编号 | text    | YES  |     | NULL    |       |
| 颜色       | text    | YES  |     | NULL    |       |
| 规格       | text    | YES  |     | NULL    |       |
| 单位       | text    | YES  |     | NULL    |       |
| 库存       | int(11) | YES  |     | NULL    |       |
+------------+---------+------+-----+---------+-------+
7 rows in set (0.02 sec)


mysql> SELECT * FROM LSB_RKZL;
+------+------+------------+------+------+------+------+
| 单号 | 品名 | 供货商编号 | 颜色 | 规格 | 单位 | 总量 |
+------+------+------------+------+------+------+------+
| 001  | CP   |            |      |      |      |   12 |
+------+------+------------+------+------+------+------+
1 row in set (0.00 sec)

mysql> SELECT * FROM LSB_KCZL;
+------+------+------------+------+------+------+------+
| 单号 | 品名 | 供货商编号 | 颜色 | 规格 | 单位 | 库存 |
+------+------+------------+------+------+------+------+
| 001  | CP   |            |      |      |      |    2 |
+------+------+------------+------+------+------+------+
1 row in set (0.00 sec)



C/C++ code
mysql_query(conn,"delete from lsb_rkzl where       \
     lsb_rkzl.单号 = lsb_kczl.单号     \
     lsb_rkzl.品名 = lsb_kczl.品名     \
     lsb_rkzl.供货商编号 = lsb_kczl.供货商编号 \
     lsb_rkzl.颜色 = lsb_kczl.颜色     \
     lsb_rkzl.规格 = lsb_kczl.规格     \
     lsb_rkzl.单位 = lsb_kczl.单位");

作者: xiaoyuanyuan2009   发布时间: 2011-05-17

第一个,你没有关联LSB,就直接读这个表里的字段,当然是错的了。
第二个,你的表里不设置主键吗?

delete from lsb_rkzl where (lsb_rkzl.单号, lsb_rkzl.品名 , lsb_rkzl.供货商编号 , lsb_rkzl.颜色 , lsb_rkzl.规格 , lsb_rkzl.单位 ) in select (
lsb_rkzl.单号, lsb_rkzl.品名 , lsb_rkzl.供货商编号 , lsb_rkzl.颜色 , lsb_rkzl.规格 , lsb_rkzl.单位 from lsb_rkzl left join lsb_kczl where lsb_rkzl.单号 = lsb_kczl.单号 \
  lsb_rkzl.品名 = lsb_kczl.品名 \
  lsb_rkzl.供货商编号 = lsb_kczl.供货商编号 \
  lsb_rkzl.颜色 = lsb_kczl.颜色 \
  lsb_rkzl.规格 = lsb_kczl.规格 \
  lsb_rkzl.单位 = lsb_kczl.单位");

作者: yangxiao_jiang   发布时间: 2011-05-17

1、上面的 SELECT .... WHERE ... 语句为什么错呢? 
LSB没有出现在FROM后面

即使把 FROM 后面在加一个 FROM “入库单表, LSB” 也是错的。
语法错误

2、上面的 SELECT .... INNER JOIN .... 语句为什么对呢?
语法正确

delete a from lsb_rkzl a inner join lsb_kczl b
on a.单号 = b.单号 and ...

作者: wwwwb   发布时间: 2011-05-17

貌似已经有人回答你没有关联了

作者: yeluolengfen   发布时间: 2011-05-17

1楼的 DELETE 语句用了 IN,IN 相当于 OR,咱要用 AND 才行啊

作者: xiaoyuanyuan2009   发布时间: 2011-05-17

or和and明显两个不同的逻辑

作者: rucypli   发布时间: 2011-05-17