SQL Server - Объединение Внешних и Внутренних объединений

Вы хотите сделать GET-запрос к вашему бэкэнду для асинхронной загрузки данных. Если вы хотите получить данные при первом монтировании компонента App, вы можете использовать fetch в componentDidMount для вызова конечной точки вашего бэкенда. Вот пример с loading отступлением и основной обработкой ошибок:

class App extends Component {
  state = {
    data: [],
    loading: true,
    error: false
  }
  ...
  componentDidMount() {
    // Pick whatever host/port your server is listening on
    fetch('localhost:PORT/api/listitems')
      .then(res => { // <-- The `results` response object from your backend
        // fetch handles errors a little unusually
        if (!res.ok) {
          throw res;
        }
        // Convert serialized response into json
        return res.json()
      }).then(data => {
        // setState triggers re-render
        this.setState({loading: false, data});
      }).catch(err => {
        // Handle any errors
        console.error(err);
        this.setState({loading: false, error: true});
      });
  }

  render() {
    return (
      

Grocery List

// The app will render once before it has data from the // backend so you should display a fallback until // you have data in state, and handle any errors from fetch {this.state.loading ?

Loading...

: this.state.error ?

Error during fetch!

: (
    this.state.data.map(item =>
  • {item}
  • )
)}
); } }

fetch не будет отклонять состояние ошибки HTTP (404, 500), поэтому первый .then немного странно .catch зарегистрирует ответ здесь со статусом, но если вы хотите увидеть сообщение об ошибке с сервера, вам нужно сделать что-то вроде этого:

if (!res.ok) {
  return res.text().then(errText => { throw errText });
}

См. См. . https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch для получения дополнительной информации или изучения других библиотек извлечения данных, таких как axios.

15
задан Tim Post 16 December 2011 в 07:39
поделиться

7 ответов

Если я понимаю правильно, что Вы хотите что-то вроде этого:

select
    *
from
    a 
    left outer join c
        inner join b on c.bID = b.ID
    on a.cID = c.ID
17
ответ дан 1 December 2019 в 01:31
поделиться

Уверенный можно сделать соединение в том же запросе:-

FROM TableA a
INNER JOIN Table b ON a.TableA_ID = b.TableA_ID
LEFT OUTER JOIN Table c ON a.TableA_ID = c.TableA_ID
4
ответ дан 1 December 2019 в 01:31
поделиться

Можно использовать и внутренние и внешние объединения в том же запросе, но их порядок важен. Посмотрите этот вопрос:
Внутреннее объединение и внешнее объединение; находится порядок таблиц в от важного?

2
ответ дан 1 December 2019 в 01:31
поделиться

Порядок не должен иметь значения.

Venn Diagram

Вот Схема Венна из Викисклада. Независимо от порядка запроса Вы собираетесь получить перекрытие между кругами A и B с пустыми указателями для столбцов C, где C не перекрывает комбинацию A и B.

2
ответ дан 1 December 2019 в 01:31
поделиться

От Вашего продолжения это кажется на желание 'условного' внутреннего объединения.

По существу, "Если A и B имеют запись, ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ к C".

Однако Вы, вероятно, сталкиваетесь с проблемой, где ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ в Вашем запросе не показывает записи, где A не имеет никаких записей, связанных с B или C. Если они будут в том же 'объеме', то INNERS будет всегда работать, Вы не можете условно сделать, чтобы они работали на основе их порядка.

Или необходимо использовать два ЛЕВЫХ соединения и отфильтровать записи, которые Вы не хотите или альтернативно используете Представление для обзора ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ.

Напр. ЛЕВОЕ СОЕДИНЕНИЕ vw_MyView НА ID=vw_MyView. A_ID

Где MyView имеет таблицы B и C с Вашим ВНУТРЕННИМ ОБЪЕДИНЕНИЕМ. Это позволит ВНУТРЕННЕМУ ОБЪЕДИНЕНИЮ быть выполненным в представлении, и затем Вы можете ОСТАВЛЕННЫЙ СОЕДИНЯТЬ с результатами.

1
ответ дан 1 December 2019 в 01:31
поделиться

Да Вы можете сделать и являетесь тем же запросом и да, порядок важен.

0
ответ дан 1 December 2019 в 01:31
поделиться

Проблемой не может конкретно быть соединение (Anthony показал Вам, как сделать wht, который Вы описали нам).Remember, что у людей часто есть проблемы с помощью оставленный соединения becasue, они пытаются вставить что-то, где пункт referncing таблица на правой стороне соединения, таким образом преобразовывающего его от внешнего объединения до внутреннего объединения (если Вы не смотрите для тех записей, где второе поле таблицы является пустым, который дает Вам записи в первой таблице а не второй).

Мы могли помочь Вам лучше, если мы говорим, что фактический код Вы использовали это wasn; t пропередача по каналу желаемых результатов, а также некоторых демонстрационных данных и демонстрационных результатов.

0
ответ дан 1 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: