Mysql 当一个表为空时,Select语句不返回任何值
我在MySQL中有两个表: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
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 + "%'