我的表:
// mytable
+-----+----------+--------------+
| id | number | name |
+-----+----------+--------------+
| 1 | 1 | red |
| 2 | 1 | |
| 3 | 1 | |
| 4 | 2 | blue |
| 5 | 2 | |
| 6 | 3 | |
| 7 | 3 | |
| 8 | 3 | |
| 9 | 4 | |
| 10 | 4 | |
+-----+----------+--------------+
现在我想要这个输出:id=6
和id=9
。 (不同的数字和名称为空)类似这样的内容:
// mynewtable
+-----+----------+--------------+
| id | number | name |
+-----+----------+--------------+
| 6 | 3 | |
| 9 | 4 | |
+-----+----------+--------------+
我的查询:
SELECT * FROM mytable group by number where name='' order by id ASC;
我的错误:
警告: mysql_fetch_assoc():提供的参数不是有效的MySQL 行{x}
上{addres}的结果资源
我该如何解决?
答案 0 :(得分:1)
这将运作良好,经过自我测试!
SELECT id, number
FROM `table`
WHERE name='' and number not in(select number from `table` where name !='')
GROUP BY number
ORDER BY id
指向:如果行数过多(实际上),则应使用 index 。
答案 1 :(得分:0)
Mea culpa,我的代码中有一点错误:
SELECT
MIN(t.id),
t.number,
"" as name
FROM
(SELECT
id,
number,
COUNT(CASE WHEN name <> "" THEN 1 ELSE NULL END) AS count_not_empty
FROM your_table
GROUP BY number) AS t
WHERE t.count_not_empty =0
GROUP BY t.number
请参阅sqlfiddle(旧输出):http://sqlfiddle.com/#!9/0eda7/6/0 请参阅新的sqlfiddle(询问新输出):http://sqlfiddle.com/#!9/0eda7/12/0
如果出现错误,我会建议您查看您是否与数据库连接良好。你可以尝试类似的东西:
$result = mysql_query(" you query here ");
if (!$result) {
echo mysql_error();
exit;
}
如果它&#34;回声&#34;错误,给我们错误,以便我们找到解决方案。
答案 2 :(得分:0)
作为
以下一项可能对您有用(取决于您是否确实需要检查空字符串或 NULL ):
SELECT DISTINCT
number
, MAX(name) AS name
FROM mytable
GROUP BY number
HAVING MAX(name) IS NULL
;
SELECT DISTINCT
number
, MAX(name) AS name
FROM mytable
GROUP BY number
HAVING MAX(name) = ''
;
在行动中看到它:SQL Fiddle
因为它不需要子选择,所以它可以提供性能增益 - 特别是使用组合所检查的两列的索引(取决于实际数据分布)。 - 你有(根据chat)+100,000行真实数据来检查......; - )
如果需要调整/进一步详细说明,请发表评论。