Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当一个表为空时,Select语句不返回任何值_Mysql_Database - Fatal编程技术网

Mysql 当一个表为空时,Select语句不返回任何值

Mysql 当一个表为空时,Select语句不返回任何值,mysql,database,Mysql,Database,我在MySQL中有两个表: BOOK(id int,isbn,title,publisher,author,...) LEND(issueid,id int,enrno,dateofissue) 我想显示BOOK where中的行 LEND中不存在Id,即尚未发布,以及 类似于“%s%” 我想在.NETC应用程序datagridview中使用此查询 我写了这个查询: select * from book where id!=(select distinct id from lend) and

我在MySQL中有两个表:

BOOK(id int,isbn,title,publisher,author,...)
LEND(issueid,id int,enrno,dateofissue)
我想显示BOOK where中的行

LEND中不存在Id,即尚未发布,以及 类似于“%s%” 我想在.NETC应用程序datagridview中使用此查询

我写了这个查询:

select * from book where id!=(select distinct id from lend) and title like '%" + textBox1.Text + "%';";
where textbox1.text is entered in textbox
当LEND为空时,此查询不显示行。这就是问题所在,它应该显示所有的书籍行。我如何修复此问题?

问题!=运算符比较两个标量值。如果要查找检查列表中是否存在特定值的方法,可以执行以下操作之一:

不用于: 在这两种情况下,都应使用查询参数替换用户输入的数据。这一点非常重要,因为否则您的系统将受到SQL注入攻击。确切的语法取决于承载查询的编程语言。

The!=运算符比较两个标量值。如果要查找检查列表中是否存在特定值的方法,可以执行以下操作之一:

不用于:
在这两种情况下,都应使用查询参数替换用户输入的数据。这一点非常重要,因为否则您的系统将受到SQL注入攻击。确切的语法取决于承载查询的编程语言。

我个人建议加入:

SELECT
    book.*
FROM
    book LEFT JOIN lend ON book.id = lend.id
WHERE
    lend.id IS NULL AND book.title LIKE '%" + textBox1.Text + "%'
根据我所读到的,这将比NOT IN有效得多,因为IN在索引上运行得非常慢,我假设NOT IN大致相同,尽管我可能弄错了。id将是主键,它是一个索引


但是,值得注意的是,如果表非常小,那么使用NOT IN不会有很大的区别。使用非常大的表时,这种效率只是一个问题,我个人过去在中使用时遇到过问题。

我个人建议使用联接:

SELECT
    book.*
FROM
    book LEFT JOIN lend ON book.id = lend.id
WHERE
    lend.id IS NULL AND book.title LIKE '%" + textBox1.Text + "%'
根据我所读到的,这将比NOT IN有效得多,因为IN在索引上运行得非常慢,我假设NOT IN大致相同,尽管我可能弄错了。id将是主键,它是一个索引


但是,值得注意的是,如果表非常小,那么使用NOT IN不会有很大的区别。使用非常大的表时,这种效率只是一个问题,我个人在过去使用in时遇到过麻烦。

Change!=不要在哇哦!!!太快了!!!愚蠢的错误。。感谢您也不需要在子查询中使用DISTINCT,如果一个项目被删除一次或十次也没有什么区别。更改!=不要在哇哦!!!太快了!!!愚蠢的错误。。感谢您也不需要在子查询中使用DISTINCT,如果一个项被删除一次或十次也没有什么区别。查询将使用NOT in,它在执行和效率方面与in有很大不同。in和NOT in基于相同的东西。我的意思是,总的说来,还是不总的说来。不在与在正好相反。不过,我会更新以澄清我的意思。我还补充了另一个注意事项,即如果数据库表很小,差异将很小。那么您就错了。mySQL中有几个性能问题,在选择中。。。子查询,但不在选择中没有问题。。。。您建议的左JOIN/IS NULL解决方案的执行计划与非IN解决方案类似。请参阅:文章。像这样的一些查询肯定无法用于连接。不过,这是一个相当简单的“不在”。尽管如此,在我提出建议之前,我确实没有正确地确定查询中没有任何额外的特殊条款。当我意识到这是一个简单的查询时,我仔细检查了一下:从lend中选择distinct id。一个更高级的查询可能不会,我不会说它不能以相同的方式使用联接。@ypercube,谢谢那篇文章。我一直在寻找提高查询性能的方法。我只是将该网站添加到书签中,以便稍后再次查找。查询将使用NOT IN,这与IN和NOT IN在执行和效率方面有很大不同。IN和NOT IN基于相同的内容。我的意思是,总的说来,还是不总的说来。不在与在正好相反。不过,我会更新以澄清我的意思。我还补充了另一个注意事项,即如果数据库表很小,差异将很小。那么您就错了。mySQL中有几个性能问题,在选择中。。。子查询,但不在选择中没有问题。。。。您建议的左JOIN/IS NULL解决方案的执行计划与非IN解决方案类似。请参阅:文章。像这样的一些查询肯定无法用于连接。不过,这是一个相当简单的“不在”。尽管如此,在我提出建议之前,我确实没有正确地确定查询中没有任何额外的特殊条款。当我意识到这是一个简单的查询时,我仔细检查了一下:从lend中选择distinct id。更高级的查询可能不会我不会
假设它不能以相同的方式使用联接。@ypercube,谢谢你的文章。我一直在寻找提高查询性能的方法。我只是把那个网站加入了书签,以便以后再查。
SELECT
    book.*
FROM
    book LEFT JOIN lend ON book.id = lend.id
WHERE
    lend.id IS NULL AND book.title LIKE '%" + textBox1.Text + "%'