Проблемы с запросом select

#sql #database #select #ado.net

#sql #База данных #выберите #ado.net

Вопрос:

введите описание изображения здесь

Привет, я включил изображение своих таблиц, то, что я хочу сделать, находится select top 6 from product detail whose state=1 в состоянии feauture. Любая помощь будет оценена. Я думал о чем-то вроде:

 Select TOP 6 [productName] As test, [productDetail] AS test1 
From [productDetail] 
INNER JOIN test ON productDetail.makeID = feautureState.makeID 
Where feautureState.state='1'; 
  

но это не работает: (

Комментарии:

1. Сообщение 208, уровень 16, состояние 1, строка 1 Недопустимое имя объекта ‘test’.

2. привет, попробуйте вызвать таблицы как dbo.tablename в запросе

3. Ваше внутреннее соединение относится к «тестовому» объекту, который вы не указали на схеме. Это ошибка при «очистке» этого запроса или это то, что вы на самом деле запускаете? Если это последнее, то в этом ваша проблема; вероятно, это должно быть «featureState».

Ответ №1:

присоединяется к имени таблицы, а не к имени столбца

 Select TOP 6 [productName] As test, [productDetail] AS test1
From [productDetail]
JOIN [featureState] ON productDetail.makeID=feautureState.makeID
Where feautureState.state='1';  

Комментарии:

1. почему вы использовали join вместо innerjoin

2. они функционально эквивалентны. в этом случае вы можете использовать либо join, либо inner join

3. «Внутренний» и «Внешний» являются непостижимыми ключевыми словами; «Соединение» подразумевается как «Внутреннее соединение», в то время как «Левое соединение» эквивалентно «Левому внешнему соединению».

4. я все еще неясен в этом мире объединения, можете ли вы предоставить мне простейший пример или новое руководство, которое может прояснить мою концепцию, заранее спасибо 🙂

Ответ №2:

это должно сработать.

кроме того, является ли state строкой или целым числом?

 Select top 6 pd.ProductName,pd.ProductDetail
from dbo.ProductDetail pd
inner join dbo.FeatureState fs on pd.makeid=fs.makeid
where fs.state=1
  

Ответ №3:

 Select top 6 pd.productName, pd.productDetail
from productDetail pd
    Inner Join feautureState  fs on fs.makeID = pd.makeID
where fs.state = 1
  

Ответ №4:

 SELECT TOP 6
  pd.productName,
  pd.productDetail
FROM dbo.productDetail pd
INNER JOIN dbo.featureState fs on fs.makeID = pd.makeID
WHERE fs.makeID = 1
  

Ответ №5:

ВНУТРЕННЕЕ СОЕДИНЕНИЕ «test» -> это не таблица

Ответ №6:

Ваше внутреннее соединение относится к «тестовому» объекту, который вы не указали на схеме. Это ошибка при «очистке» этого запроса или это то, что вы на самом деле запускаете? Если это последнее, то в этом ваша проблема; вероятно, это должно быть «featureState».

Ответ №7:

В вашем внутреннем соединении должно быть указано имя таблицы, к которой вы присоединяетесь. Кроме того, я предполагаю, что state — это int, а не varchar , поэтому кавычки не нужны.

 Select TOP 6 [productName], [productDetail] 
From [productDetail] 
INNER JOIN featureState ON productDetail.makeID = feautureState.makeID 
Where feautureState.state = 1; 
  

Ответ №8:

Как говорили другие, вы можете исправить свой запрос следующим образом.

 SELECT TOP 6 [productName] As test, [productDetail] AS test1 
FROM [productDetail] 
INNER JOIN featureState ON productDetail.makeID = feautureState.makeID 
WHERE feautureState.state='1'; 
  

Однако вам необходимо указать ORDER BY предложение, иначе результаты, которые вы получите, будут непредсказуемыми.

Также из вашей схемы следует, что у вас есть однозначная связь с ProductDetail и FeatureState , возможно, флаг состояния должен быть столбцом в вашей ProductDetail таблице? Но возможно, что вы предоставляете только упрощенную версию своей базы данных.

Редактировать —- В ответ на комментарии.

Чтобы добавить столбец в существующую таблицу, предполагая, что у вас есть данные.

 ALTER TABLE ProductDetail
  ADD FeatureState BIT NULL 
  

Или вы можете установить значение not null и указать значение по умолчанию для всех существующих строк

 ALTER TABLE ProductDetail
  ADD FeatureState BIT NOT NULL CONSTRAINT [DF_ProductDetail_FeatureState] DEFAULT (0)
  

Комментарии:

1. Ну, я не включил столбец state в сведения о продукте, я установил связь между этими двумя таблицами и установил для свойства insert значение cascade , чтобы при добавлении нового продукта таблица feauturestate также обновлялась, это правильный способ сделать это

2. Если у одного продукта есть флаг состояния единственной функции, тогда нет необходимости во второй таблице и связи FK. Просто добавьте столбец featurestate в свою таблицу productdetail.

3. хорошо, thnx сделает это, еще одна вещь, есть ли какой-либо простой способ добавления столбца в текущую таблицу, потому что тогда мне придется удалить все и воссоздать таблицу заново, и скопировать все ячейки плюс удалить relationshops.

4. Я исправил ответ, это должно упростить ваш запрос.

5. спасибо большое.. Хотел бы я, чтобы в университете думали, что все эти вещи ,, программирование — это самообучение ..

Ответ №9:

Приведенное ниже утверждение является одним из решений вашей проблемы.

Выберите Top 6 * из dbo.ProductDetail, в котором указан makelid (Выберите makelid из dbo.feautureState, где State = 1)