我的SELECT查询不返回任何值,而只显示一个空网格

时间:2019-04-13 07:04:02

标签: sql mysql-workbench

我是SQL编程的新手,但查询中的一个问题是不返回值,而只有一个空查询,状态和城市不带值。

S具有以下属性:sNo,sName,状态,城市 SP具有以下属性:sNo,pNo,qty,

任何人都可以向我解释为什么不显示这些值吗?

import React, { Component } from 'react';
import Web3 from 'web3';
import './App.css';

class App extends Component {

  conponentWillmount() {
    this.loadBlockchainData()
  }

  async loadBlockchainData() {
    const web3 = new Web3(Web3.givenProvider || "http://localhost:7545")
    const network = await web3.eth.net.getNetworkType()
    console.log("network:", network)
    const accounts = await web3.eth.accounts[0]
    this.state({ account: accounts[0]}) 
    console.log("account:", accounts[0])
    // Fetch Account
  }

  constructor(props) {
    super(props)
    this.state = { account: ''}
  }

  render() {
    return (
      <div className="container">
        <h1>Hello world</h1>
        <p>Your account : {this.state.account} </p>
      </div>
    );
  }
}

export default App;

2 个答案:

答案 0 :(得分:3)

首先,如果您正在学习SQL,则应该正确学习SQL。 从不FROM子句中使用逗号。 始终使用正确的,明确的,标准 JOIN语法。

因此,您的查询应如下所示:

SELECT S.status, S.city
FROM S JOIN
     SP
     ON SP.sNo = S.sNo
WHERE S.sNo = 'Paris' ;

为什么这没有返回结果?原因如下:

  • SSP中没有行共享同一城市。
  • S.sNo永远没有值'Paris'
  • 一个或另一个表没有行(这是第一个原因的子集,但值得强调)。

在这种情况下,最可能的原因是sNo从不具有值'Paris'。您尚未提供任何数据,所以我只能推测您打算这样做:

SELECT S.status, S.city
FROM S JOIN
     SP
     ON SP.sNo = S.sNo
WHERE S.city = 'Paris' ;

但这是有道理的。

一件事是可疑的。我希望称为sNo的键列是数字。在大多数数据库中,与字符串的比较(例如'Paris')将返回类型转换错误。 MySQL进行隐式转换。因此,如果sNo是一个数字,则比较将被解释为sNo = 0 -如果条件为true,则实际上可以返回行。

答案 1 :(得分:2)

在where子句s.city ='paris'

查询

  SELECT S.status, S.city
    FROM S, SP
    WHERE S.city ='Paris' AND SP.sNo=S.sNo;